7

ViewPagerでViewとFragmentのどちらを使用するかについて質問があります。

背景:ListViewを含むアクティビティAがあります。各ListViewアイテムはアクティビティBを開きます。アクティビティBは、アクティビティAでタップされたListViewアイテムに応じて異なるコンテンツを表示します。アクティビティBのコンテンツはListView内に表示されます。

質問:アクティビティAとBの間を行ってコンテンツを切り替えるのではなく、水平ビュースワイプを実装して、アクティビティB内のすべてのコンテンツを切り替える必要があります。私が見つけた解決策の1つは、作成することです。アクティビティBのListViewの多くのインスタンスであり、ViewPager+PagerAdapterで使用します。ドキュメントにあるもう1つの解決策は、そのListViewをFragmentに取り込み、フラグメントの多くのインスタンスを作成して、ViewPager+FragmentPagerAdapterまたはFragmentStatePagerAdapterで使用することです。

私の質問は、それぞれのアプローチを使用することの利点は何ですか?ListViewをFragmentに取り込むというすべての問題を解決する必要がありますか、それとも単にViewPagerでListViewを使用する必要がありますか?

ありがとう

4

1 に答える 1

12

Aは、UIビジネスロジックを特定の(またはグループの)Fragmentものに結び付けたい場合に便利なアプローチだと思います。Viewご存知のように、その個人Fragmentには、同じように独自のライフサイクルコールバックなどがありますActivity

Activity単一のホストを複数持つのではなく、単一ListViewのドライブの背後にあるロジックを処理するだけでよいPagerAdapterためFragmentこのアプローチを使用する方がクリーンな場合があります。FragmentListView

これは、私が今直面している状況と非常によく似ています。内にさまざまな垂直スクロールフォーム(多数の入力フィールドで構成される)を表示していViewPagerます。私の場合、特定のページにまったく異なる種類のビューを実際に表示する必要がある可能性があるため、このFragmentアプローチを採用しました。ViewPagerたとえば、最初の数ページに、ユーザー入力フォームが表示される場合があります。ただし、最終ページにはグラフが表示されます。そのグラフを駆動するには、まったく別のロジックセットが必要です。これらの入力フォームと1つのグラフを1つから駆動するActivityには、少し面倒になります。おそらく、いくつかのデリゲートクラスなどにビジネスロジックを含める必要があります。だから私にとって、Fragmentsは結局のところ明白な選択でした。私は私InputFormFragmentGraphFragmentView、およびそれらはそれぞれ、それらが提供するsに適用可能なロジックのみを含みます。

View考慮すべきもう1つのことは、近い将来、あなたも別の種類のを表示したいと思うかもしれないということですViewPager。または、別のUIレイアウトをまとめて使用することもできます。おそらく、使用しないViewPagerがすべてを並べて表示するUIレイアウトです(たとえば、横向きモードの大型タブレットで使用されるレイアウト)。sを使用Fragmentすると、物事ははるかにモジュール化され、コードを因数分解してこれをより迅速に行うことができます。一方、s内ActivityのシンプルPagerAdapterですべてのロジックを含むシングルを使用して目的を達成した場合は、新しい種類のsまたは特別なタブレットレイアウトListViewをサポートするために、将来さらに作業が必要になる可能性があります。View

私が言うことの1つは、自分自身Fragmentにsを実装したことです。特別な要件がある場合は、少し厄介になる可能性があります。の管理には注意が必要な場合があります。たとえば、私のUIの場合、を含むをプログラムで追加および削除できる必要がありました。また、特定の時点ですべてのから同時にデータを収集する必要があるため、使用中のアダプターが表示された後、それらが破壊されないようにする必要がありました。さらに、sが適切に通過し、が削除されたときに削除されるように、拡張および変更する必要がありました。ViewPagerFragmentPagerAdapterFragmentStatePagerAdapterFragmentViewPagerFragmentFragmentFragmentFragmentPagerAdatperFragmentonDestroy()FragmentManagerViewPager

Fragment■さまざまな画面サイズと向きのUIを構築する非常にモジュール化された方法を可能にし、個々のUI要素のビジネスロジックとライフサイクルをカプセル化する方法に優れています。ListViewただし、シナリオが実際にaの数秒と同じくらい単純でViewPagerあり、モジュール性が必要ないことがわかっている場合は、Fragmentsのオーバーヘッドが過剰になる可能性があります。

于 2012-10-09T17:13:35.203 に答える