更改ViewPager的顺序并更新视图

时间:2012-11-07 10:24:55

标签: android android-viewpager viewpagerindicator

我有一个包含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
}

由于

2 个答案:

答案 0 :(得分:1)

使用FragmentStatePagerAdapter很棘手,因为你必须自己实现逻辑,但FragmentPagerAdapter已经为此目的提供了功能,这样做容易得多。

调用.notifyDataSetChanged()调用适配器的getItemPosition(Object object) - 方法。在这里,您应该通过返回希望将片段放置在其上的页码来向ViewPager提供有关将片段放在参数object中的位置的信息。

有关如何执行此操作的示例,check out my answer here

答案 1 :(得分:0)

如果性能不是非常重要,那么强制FragmentStatePagerAdapterFragmentPagerAdapter重绘(无效)其所有视图/片段非常容易:只需覆盖{{ 1}}并像往常一样调用getItemPosition

notifyDataSetChanged()

有关详细信息,请查看我的帖子:How to use orderByKey() in descending order instead of ascending #Askfirebase