我有一个带有ViewPager视图的10+。我希望偶尔改变页码的顺序。
第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
}谢谢
发布于 2013-02-11 23:34:04
使用FragmentStatePagerAdapter是很棘手的,因为您必须自己实现逻辑,但是使用FragmentPagerAdapter要容易得多,因为FragmentPagerAdapter已经为此目的提供了功能。
调用.notifyDataSetChanged()调用适配器的getItemPosition(Object object)-method。这是您应该向ViewPager提供将片段放在参数object中的位置的信息,方法是返回希望将片段放置在其上的页码。
关于如何做到这一点的示例,看看我的答案。
发布于 2016-07-29 23:26:25
如果性能不是非常重要,那么很容易强迫FragmentStatePagerAdapter或FragmentPagerAdapter重新绘制(使其所有视图/片段无效):只需像通常那样覆盖getItemPosition并调用notifyDataSetChanged()。
@Override
public int getItemPosition(Object object) {
return POSITION_NONE; //In source code, POSITION_NONE = -2 FYI
}欲了解更多信息,请访问我的帖子:如何使用orderByKey()以降序取代升序#Askfirebase
https://stackoverflow.com/questions/13267716
复制相似问题