私はViewPager
を使用していますが、コンテンツ内だけでなく、さまざまなクラスを使用して、多くの異なるFragments
を表示しています。表示されるリストは動的に変更する必要があります。アイテムを交換して新しいものをアダプタに追加しても(そしてnotifyDataSetChanged
と呼んでも)、次のアイテムを変更しようとすると、使用時にスライドされます。mPager.setCurrentItem(mPager.getCurrentItem() + 1);
ViewPagerの次のページを動的に変更します
現在の項目と現在の項目の間に新しいFragment
を追加するだけで、アダプタに正しく表示されますが、次の項目が既にプリロードされているので、アダプタのgetItem
も呼び出されません。
「notifyDataSetChanged
」よりも「強い」という別の方法があります。これは、私のViewPager
に、次のアイテムを再度取得するよう指示しますか?
コードサンプル:
追加し、私のFragmentPagerAdapter
(サンプルだけではなく、実際のコード)内のアイテムのメソッドを取得
public void add(@NonNull Integer fragmentIndex) {
mFragmentOrder.add(fragmentIndex);
notifyDataSetChanged();
}
@Override
public Fragment getItem(int position) {
int selectedFragment = mFragmentOrder(position);
Fragment fragment;
switch (selectedFragment) {
case 1:
fragment = new FragmentA();
break;
case 2:
fragment = new FragmentB();
break;
case 3:
fragment = new FragmentC();
break;
default:
fragment = new FragmentD();
break;
}
return fragment;
}
これは、次の項目に移動する機能です
public void goToNext() {
mPager.setCurrentItem(mPager.getCurrentItem() + 1);
}
(私はスワイプすることはできません)
EDITS:
編集1:私はすでに代わりFragmentStatePagerAdapter
を使用してOffscreenPageLimit
0に設定しようとしたが、無駄にしていました。
編集2:[解決策] FragmentStatePagerAdapter
を使用してを返すために関数getItemPosition
を上書きするか、適切な場合にインデックスが問題を解決しました。何らかの理由で、この関数の正しいバージョンを実装した後でさえ、通常のFragmentPagerAdapter
は、間違ったFragment
を配信し続けました。
https://developer.android.com/reference/android/support/v4/app/FragmentStatePagerAdapter.html –
私は既に「FragmentStateAdapter」で試していましたが、とにかく問題を解決しませんでした。私が言ったように、 '' ViewPager''は、新しい "次の"スライド用のアダプタを再クエリーしません。既にプリロードされているスライドだけを表示します。オフページの制限を設定しようとしても何もしません。 – Raeglan