問題タブ [fragmentstatepageradapter]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
541 参照

android - FragmentStatePagerAdapter のすべての Fragment でメソッドを呼び出す

ListFragments をページングする ViewPager があります。各ページは特定の日付であり、各ページのリストには複数のカテゴリのアイテムが含まれています。

ユーザーは、ダイアログを介して表示されるカテゴリをいつでも切り替えることができます。カテゴリ リストの変更後にインスタンス化されたページ (およびそのフラグメント) では、新しい設定でインスタンス化されるため (変更時に FragmentStatePagerAdapter に渡される)、これは問題ではありません。

But my problem is with all pages that have already been instantiated up to when the user changes the categories list. These pages (or rather, their fragments) need to immediately refresh. To accomplish this I need to be able to call a method (changeData()) to pass the new categories settings to each ListFragment which then calls notifyDataSetChanged() so they will refresh their view.

How can I perform this call on already-instantiated fragments in the FragmentStatePagerAdapter?

Here is my code for the FragmentStatePagerAdapter and the ListFragments used to populate the pages:

上記の seListingCategories() メソッドを使用してアダプターにカテゴリ文字列を設定しているため、新しくインスタンス化されたすべてのフラグメントに正しいカテゴリが表示されます。同じメソッドで、Adapter で notifyDataSetChanged() を呼び出す行がコメント アウトされていることに気付くでしょう。

その呼び出しにより、アダプタはメモリ内のすべての Fragment (現在のページとまだ破棄されていない他のすべてのページ) に対して getItemPosition() を呼び出します。そして、ビューは正常に更新されました。

ただし、(保存された状態で) 既に破棄されたフラグメントは、更新されたカテゴリ リストを持たない保存された状態に復元されるようです。言うまでもなく、これはやり過ぎのようです。既存のオブジェクトを更新するだけでよいのに、なぜすべてのフラグメントを破棄して再作成するのでしょうか?

とにかく、以下は FragmentStatePageAdapter で使用される ListFragment クラスです。

助けてくれてありがとう!

0 投票する
1 に答える
4252 参照

android - Fragment の ViewPager の Fragment が向きの変更時にリロードされない

ActionBarSherlock と ViewPagerIndicator を使用する Android アプリケーションの開発に取り組んでいます。主なアクティビティは SherlockFragmentActivity で、ユーザーはアクション バーのタブを介してフラグメント間を移動します。すべてのタブは SherlockListFragments であり、ほとんどのタブには ListView のみが含まれています。ただし、1 つのフラグメント (HeadlinesFragment) には、タブレットの場合は ViewPager、CirclePageIndicator、および ListView が含まれ、電話の場合は ListView のみが含まれます。ViewPager には、アイテムの SherlockFragment を返す FragmentStatePagerAdapter があります。

問題は、方向の変更 (または実際の構成の変更) で、ViewPager 内の子フラグメントがリロードされず、ViewPager が空の場合のように、CirclePagerIndicator にインジケーターが表示されないことです。ただし、ListView は適切にリロードされます。フラグメントの最初のロードでは、ViewPager は正しく機能しますが、向きが変更された後では機能しません。

MainActivity.java

HeadlinesFragment.java

activity_headlines.xml

RotatorAdapter.java

RotatorFragment.java

0 投票する
1 に答える
3385 参照

android - ViewPager でページを動的にスキップする

を介して sViewPagerを保持する を取得しました。ページャーが最初に次のページ ( )を保持しているとします。FragmentFragmentStatePagerAdapterFragment

ユーザーがスワイプすると、 から 、 などに移動できますABただしBCユーザーがページのいくつかのオプションを変更すると、 ではAなく に移動できる場合があります。BC

次に、ユーザーは に戻りA、何かを変更して、 を再度有効にしますB

この非常に動的な動作を実現するにはどうすればよいですか? Fragmentユーザーが何かを変更したときに sを追加することはできませんViewPager

0 投票する
1 に答える
644 参照

android - Androidフラグメントに複数の膨張したレイアウトのビューステートを保存する方法は?

ツアー予約アプリを開発しています。私のツアー予約ページには、2 種類のフォームがあります。1 つはリード旅行者用で、もう 1 つは他の旅行者 (大人または子供) 用です。
主な旅行者のフィールドは次のとおりです。
役職


性別
生年月日
電子メール
連絡先番号
国籍

旅行者のその他のフィールドは次のとおりです。
役職


性別
生年月日

このシナリオを処理するために、メイン レイアウトにリード旅行者フォームを作成し、他の旅行者フォームを複数回表示する必要があるため、他の旅行者フォームを別のレイアウトに配置しました。最初の試行では、ユーザーはリード旅行者フォームのみを取得します。ユーザーがクリックすると、他の旅行者フォームが表示されます。他の旅行者フォームを表示するために、otherform.xml ファイルを拡張しました。この目的のために、アクティビティではなくフラグメントを使用しています。

私の問題は、送信して次の予約ステップに移動した後です(次のフラグメントに移動します)。旅行者情報を変更するために戻ってきたら。膨張したレイアウト (他の旅行者フォーム) はすべてなくなりました。そして、私の最後の他の旅行者フォーム フィールドのデータは、リード旅行者フォーム フィールドに転送されます (最初の 5 つのフィールドのデータのみが変更され、残りの 3 つのフィールドのデータは以前に入力したものと同じです)。

これらの膨張したレイアウトをカムバック時に保存し続ける方法はありますか?

どんな助けでも本当に感謝しています。前もって感謝します

0 投票する
0 に答える
165 参照

android - FragmentStatePagerAdapter 内のフラグメントを復元します (つまり、リストの位置を記憶します)

(多くのページがある)で をFragmentStatePagerAdapter使用するViewPagerと、メモリの問題が発生していたため、を使用しています。FragmentPagerAdapter

ListFragmentsこれはうまく機能しますが、フラグメントが再作成されたときにページ ( ) を元の位置に復元できるようにしたいと考えています。これは簡単に思えますが、それを達成するのはあまり運がありません。

誰にもヒントはありますか?

ありがとう