7

まず、FragmentStatePagerAdapter を使用して、表示するフラグメントを ViewPager にフィードしています。

アプリが実行中の状態 (つまり の後onResume()) の場合、ViewPager で setAdapter を呼び出すと常に機能し、ViewPager が更新getItem(int position)され、アダプターのメソッドが呼び出されます。

onCreate(Bundle savedInstance)ただし、向きを変更した後、アクティビティのメソッドで setAdapter を呼び出すと、getItem(int position)メソッドは呼び出されず、古いフラグメントが再利用されます。

FragmentManager が私が理解できないことをしているのかもしれません。Fragment Manager は、向きの変更中に破壊されない唯一のものです。

ありがとう

4

3 に答える 3

23

getFragmentManager()ネストされたフラグメントを使用しているときに FragmentStatePagerAdapter をインスタンス化するために使用していることが原因である可能性があります。

getChildFragmentManager()代わりに使用してみてください:

CustomFragmentPagerAdapter fragmentPagerAdapter = new CustomFragmentPagerAdapter(getChildFragmentManager());

答えはここで見つかりました。

于 2014-01-23T16:53:06.833 に答える
1

さて、これが私が見つけたものです(それは非常に奇妙です)。

の項目を更新する必要がある場合、同じものを渡すときにの新しいインスタンスを作成し、それらを の呼び出しに渡すと、PagerAdapter間違いなく失敗します。たとえば、次のようになります。PageAdapterFragmentManagersetAdapterViewPager

FragmentManager fm = getChildFragmentManager();
mViewPager.setAdapter(new MyPagerAdapter(fm));

また

FragmentManager fm = getActivity().getSupportFragmentManager();
mViewPager.setAdapter(new MyPagerAdapter(fm));

FragmentManagerただし、初期化中に sを常に切り替える場合はPagerAdapter、機能します。

私の観点からすると、それは恐ろしいことです...誰かがアイテムをViewPager適切にリフレッシュする方法についてのアイデアを持っている場合(そして、この汚い方法ではありません)、あなたの考えを他の人と共有してください:)

于 2015-03-30T12:12:40.383 に答える
0

FragmentPagerAdapter を使用していますが、mViewPager.setAdapter() が機能しません。次の手順で修正します:
(1) 現在の Fragment リストを取得します。

List<Fragment> fragmentList = getSupportFragmentManager().getFragments();
List<Fragment> fragmentListCopy = new ArrayList<Fragment>(fragmentList);

(2)フラグメントを手動で削除する

//I have two fragment
getSupportFragmentManager().beginTransaction().remove(fragmentList.get(0)).commit();
getSupportFragmentManager().beginTransaction().remove(fragmentList.get(1)).commit();

(3)新しい FragmentPagerAdapter を ViewPager に設定する

mViewPager.setAdapter(...)

新しいアダプタを設定する前に、フラグメントを削除してください。

于 2016-06-28T07:17:18.427 に答える