0

私は携帯電話とタブレット用のアプリを書いています。連絡先アプリと同様に、複数のタブ (私の場合は 2 つ) があります。電話 UI の場合、これらは ViewPager によって管理され、各タブのフラグメントが含まれます。

ただし、タブレット UI の場合、各タブはフラグメントではなくアクティビティです。フラグメント内にフラグメントを配置することはできないため、そうする必要があります。(右?)

タブリスナーを呼び出すだけでよいことsetContentView()はわかっていますが、アクティビティが変更されるたびに破棄されませんか? 私はこれに多くのことで混乱しています。

携帯電話の UI を壊さずにこれを行う最善の方法は何ですか?

4

1 に答える 1

1

適切に設計されたタブ付き UI は、タブ コンテンツにアクティビティを使用しません。

現在の実装ではフラグメントをネストできないという点で正しいですが、それはあなたの唯一の選択肢がアクティビティであることを意味するものではありません。タブは常にビュー スイッチとして機能する必要があります。タブ スイッチはナビゲーション履歴を作成せず、タブ ナビゲーションは常に同じアクティビティ内で発生する必要があります。

アクティビティとフラグメントは、MVC の観点からはコントローラーにすぎないことに注意してください。それらは、ライフサイクル イベントに応答し、それらのイベントに応答して UI 内のビューを含むアプリケーションの要素を管理するために存在します。UI のコンテンツは、現在のウィンドウのビュー階層によって完全に決定され、アプリにとって意味のある方法でビュー階層を操作できます。(できればデザインガイドラインに従ってください!)

フラグメントにはビューのサブ階層を管理するための組み込みメカニズムがあるため、多くの場合、フラグメントは UI を因数分解するための自然な選択ですが、唯一の方法ではありません。ViewPager PagerAdapters は、ビューのサブ階層をリソース システムから膨張させたり、ListView のようにビューをリサイクルしたり、フラグメントが提供するライフサイクル イベントが不要な場合はフラグメントをまったく使用しないその他のメカニズムを考え出すことで、ビューのサブ階層を操作できます。さまざまなレイアウト リソースでは、さまざまなリソース修飾子にさまざまなレイアウト バリアントを使用して、画面サイズに基づいて特定の要素を含めたり除外したりできます。

つまり、フラグメントがマルチペイン UI を実行する唯一の方法である、または ViewPager の各ページを実装する唯一の方法であるという考えにとらわれないでください。どちらも強力なオプションですが、アクティビティの情報アーキテクチャによっては、別のアプリとは異なる方法でそれらを使用している場合がありますが、それは問題ありません。

全体として、Activity の UI を因数分解するときに論理的なカット ポイントがどこにあるかを判断するのに問題がある場合は、アプリの全体的な UI を構築している可能性があります。UI 設計に合わせて実装を進めてください。各タブがアクティビティ ウィンドウのコンテンツ全体を自然に切り替えている場合、各タブはフラグメントに適している可能性があります。おそらく、タブレット モードのこれらのフラグメントは、その機能を拡張し、異なるレイアウト リソースを使用して、それぞれのレイアウトに複数のペインを表示します。

于 2012-09-02T04:39:46.903 に答える