我有一个包含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
}
由于
答案 0 :(得分:1)
使用FragmentStatePagerAdapter
很棘手,因为你必须自己实现逻辑,但FragmentPagerAdapter
已经为此目的提供了功能,这样做容易得多。
调用.notifyDataSetChanged()
调用适配器的getItemPosition(Object object)
- 方法。在这里,您应该通过返回希望将片段放置在其上的页码来向ViewPager提供有关将片段放在参数object
中的位置的信息。
有关如何执行此操作的示例,check out my answer here。
答案 1 :(得分:0)
如果性能不是非常重要,那么强制FragmentStatePagerAdapter
或FragmentPagerAdapter
重绘(无效)其所有视图/片段非常容易:只需覆盖{{ 1}}并像往常一样调用getItemPosition
。
notifyDataSetChanged()
有关详细信息,请查看我的帖子:How to use orderByKey() in descending order instead of ascending #Askfirebase