首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改ViewPager的顺序和更新视图

更改ViewPager的顺序和更新视图
EN

Stack Overflow用户
提问于 2012-11-07 10:24:54
回答 2查看 3.3K关注 0票数 1

我有一个带有ViewPager视图的10+。我希望偶尔改变页码的顺序。

第1页第2页第3页

第3页第1页第2页

对于使用ViewPagerIndicator的选项卡,我可以通过更改适配器的顺序并调用:

代码语言:javascript
复制
mViewPagerIndicator.notifyDataSetChanged();

但是,我不能更新ViewPager的内容,例如,如果我更新ViewPager适配器(按照我希望页面位于的新顺序)并调用:

代码语言:javascript
复制
mViewPager.getAdapter().notifyDataSetChanged()

这没有任何效果。选项卡指示器条被很好地更新,但是页面的内容仍然显示旧的顺序。

是否有一种方法可以更改ViewPager适配器中页面的顺序,并使ViewPager重新加载其所有视图?

我的ViewPager适配器扩展了FragmentStatePagerAdapter,重写的方法如下所示:

代码语言:javascript
复制
@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
}

谢谢

EN

回答 2

Stack Overflow用户

发布于 2013-02-11 23:34:04

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

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

关于如何做到这一点的示例,看看我的答案

票数 1
EN

Stack Overflow用户

发布于 2016-07-29 23:26:25

如果性能不是非常重要,那么很容易强迫FragmentStatePagerAdapterFragmentPagerAdapter重新绘制(使其所有视图/片段无效):只需像通常那样覆盖getItemPosition并调用notifyDataSetChanged()

代码语言:javascript
复制
@Override
public int getItemPosition(Object object) {
    return POSITION_NONE; //In source code, POSITION_NONE = -2 FYI
}

欲了解更多信息,请访问我的帖子:如何使用orderByKey()以降序取代升序#Askfirebase

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13267716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档