13

Android 2.1 以降で実行され、Android 4 のように見える (サポート ライブラリ フラグメントを使用する) アプリで、3 層のネストされたタブを動作させるのに深刻な問題があります。

目標

  • アプリには ActionBar が必要です (動作、現在は ActionBarSherlock を使用)
  • 画面が十分に大きくても、メイン画面の 3 つの固定タブは ActionBar に移動しません。これらのタブの 2 番目の内容は...
  • ユーザーが最初にログインしたときにサーバーからロードされた約 4 つのタブ。これらのそれぞれが含まれています
  • ユーザーが初めてログインしたときにサーバーから読み込まれた約 10 個のスワイプ可能なタブ (Play ストアなど)。ここでの私の考えは、ViewPagerIndicator を使用することです。そのライブラリは、ActionBarSherlock と同じ人によって書かれているため、問題を最小限に抑える必要があります。しかし、私はここでアイデアを受け入れます)。これらのスワイプ可能な各タブには、現在フラグメントになっているものがありますが、変更される可能性があります。

問題

これが Android 2 アプリだったときは、ネストされた TabActivities を単純に使用していましたが、これらはすべての Android 4 のものでは機能しません。おそらくこれを行う方法がわかりません。特に、「フラグメントをネストできない」という制限が頭痛の種です。また、Activity ごとに 1 つの FragmentManager しか使用できないようです。そのため、2 行目のタブのそれぞれに 1 つの FragmentManager を配置するという私の考えは機能しませんでした (最初のタブ以外はすべて空のままでした)。これを正しい方法で行う方法は?

(「別の GUI デザインを使用する」という選択肢はありません。これはお客様が求めたものであり、再検討するつもりはないことをご承知おきください)

4

1 に答える 1

3

PagerAdapterFragments子供としては必要ありません。そこで独自のカスタム ビューを拡張/管理できます。したがって、ネストされたを引き続き使用できTabActivitiesます。または、Fragmentsトップレベルに置きViews、ボトムレベルで独自のものを管理することもできますViewPager

理論的にはViewFlipper、フラグメントを に保持したい場合にも使用できますViewPager。タブとして独自に記述する必要がありますLinearLayoutが、これは簡単です。Buttonsホロの外観を探している場合は、スタイルを ABS にあるものに設定するだけです。

別のオプションは、を使用TabHostせずに使用することTabActivityです。フラグメントでも使用できます。ここの例を参照してください。

また、注意: ViewPagerIndicator の Google Play スタイルを探している場合は、サポート パッケージに含まれるようになりました: PagerTitleStrip

最適なオプションは、フラグメントをトップレベルとして使用することであると思います。これにより、メモリ消費が削減されます。

そうは言っても、

これはひどい UI パターンのように聞こえると言わざるを得ません。さらに悪いことに、1 つの で多くの膨らんだビューについて話していることになりますActivity。表示内容によっては、ここでメモリの問題が発生する可能性があります。底にViewStubs保管する場合は、頻繁に使用してリサイクルすることをお勧めします。ViewPager

トップレベル (メインの 3 つのタブ) にActionBarスピナー パターンを使用するようにクライアントをプッシュし続けるか、派手なスライド ドロワーパターンを検討してください。おそらく、その滑らかなアニメーションは、彼らの意見を揺るがすのに十分かもしれません.

公式のデザイン Web サイトを紹介し、Gmail、YouTube、Google+、Evernote などで見られるような一般的なナビゲーション パターンの例を示します。最近、あなたが説明したものとまったく同じパターンを要求しているクライアントに対処し、数週間プッシュした後2 層以上のタブは受け入れられないことを彼らに納得させることができました。

私のWall of Shame Google+ ページを見せて、人気のある Android アプリで使用されている悪いデザイン パターンを紹介することもできます: Android UI Anti-Patterns。:-)

于 2012-09-23T17:23:55.083 に答える