2012-11-07 41 views
0

我有10多个视图的ViewPager。我希望偶尔更改页面的顺序,例如更改ViewPager的顺序并更新视图

Page 1 |第2页|第3页

Page 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 
} 

感谢

回答

1

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

调用.notifyDataSetChanged()调用getItemPosition(Object object) - 适配器的方法。在这里,您应该向ViewPager提供关于在参数object中传递片段的位置的信息,方法是返回想要放置片段的页码。

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

0

如果性能是不是超级重要的是,它真的很容易迫使FragmentStatePagerAdapterFragmentPagerAdapter重绘(无效)所有的意见/片段:只重写getItemPosition,并呼吁notifyDataSetChanged()像平时那样。

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

欲了解更多信息,请参阅我的文章:How to use orderByKey() in descending order instead of ascending #Askfirebase