1

10 以上のビューを持つ ViewPager があります。ページの順序をときどき変更したい

ページ 1 | ページ 2 | 3ページ

ページ 3 | ページ 1 | ページ2

ViewPagerIndicatorを使用しているタブの場合、アダプターの順序を変更して呼び出すことで、これらの順序を更新できます。

mViewPagerIndicator.notifyDataSetChanged();

ただし、更新できないのは ViewPager のコンテンツです。たとえば、ViewPager アダプターを (ページを配置したい新しい順序に) 更新し、次のように呼び出します。

mViewPager.getAdapter().notifyDataSetChanged()

これは効果がありません。タブ インジケーター バーは正常に更新されますが、ページのコンテンツはまだ古い順序で表示されます。

ViewPager アダプターでページの順序を変更し、ViewPager にすべてのビューをリロードさせる方法はありますか?


ViewPager アダプターが拡張FragmentStatePagerAdapterされ、オーバーライドされたメソッドは次のとおりです。

@Override
public Fragment getItem(int position) {
    return MyCustomFragment.newInstance();
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    //super.destroyItem(container, position, object);  // Commented out to ensure views are not destroyed
}

ありがとう

4

2 に答える 2

1

自分でロジックを実装する必要があるため、扱いにくいですが、この目的のための機能が既に提供されているものを使用FragmentStatePagerAdapterすると、はるかに簡単になります。FragmentPagerAdapter

呼び出すと、アダプターの -method が.notifyDataSetChanged()呼び出されます。これは、 Fragment を配置するページ番号を返すことによりgetItemPosition(Object object)、パラメーターで渡された Fragment を配置する場所の情報を ViewPager に提供する必要がある場所です。object

これを行う方法の例については、こちらの回答をご覧ください

于 2013-02-11T23:34:04.747 に答える
0

パフォーマンスがそれほど重要でない場合は、すべてのビュー/フラグメントを強制FragmentStatePagerAdapterまたは再描画 (無効化) するのは非常に簡単です。通常どおりオーバーライドして呼び出すだけです。FragmentPagerAdaptergetItemPositionnotifyDataSetChanged()

@Override
public int getItemPosition(Object object) {
    return POSITION_NONE; //In source code, POSITION_NONE = -2 FYI
}

詳細については、私の投稿をご覧ください:昇順ではなく、降順で orderByKey() を使用する方法 #Askfirebase

于 2016-07-29T23:26:25.620 に答える