首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >FragmentStatePagerAdapter不处理更改

FragmentStatePagerAdapter不处理更改
EN

Stack Overflow用户
提问于 2014-12-01 23:52:15
回答 1查看 661关注 0票数 0

我在使用FragmentStatePagerAdapter管理更改的项目列表时遇到了问题。请检查源这里

问题是,当底层列表发生变化(我称之为notifyDataSetChanged )时,适配器不会重新构建它的内部片段列表。引用instantiateItem中的代码

代码语言:javascript
复制
@Override
public Object instantiateItem(ViewGroup container, int position) {
    // If we already have this item instantiated, there is nothing
    // to do.  This can happen when we are restoring the entire pager
    // from its saved state, where the fragment manager has already
    // taken care of restoring the fragments we previously had instantiated.
    if (mFragments.size() > position) {
        Fragment f = mFragments.get(position);
        if (f != null) {
            return f;
        }
    }

我相信这个评论中的代码是错误的!如果我删除列表中位置0的项目,并调用notifyDataSetChanged,那么位置0处的片段应该被删除。但是,适配器从未更新过片段在它自己的私有列表中的位置。因此,它仍然显示旧的、删除的数据。

我找到了这个答案,但这是一个黑客,它依赖于调用getItemPosition,然后强制片段更新其视图。

如何能够管理更改列表中的片段?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-02 00:04:14

根据ViewPager.dataSetChanged()源,它使用PagerAdapter.getItemPosition()来确定数据更改后项目的新位置。默认情况下,getItemPosition()总是返回不变,这意味着它永远不会破坏和重新创建已经创建的项。

如果要更新响应于getItemPosition()调用而存在的片段,则重写notifyDataSetChanged()返回正确的值。例如,总是返回总是会销毁每个片段并从头开始重新创建它们(在大多数情况下,如果项目只是重新排序的话,这比需要做的工作更多)。

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

https://stackoverflow.com/questions/27239534

复制
相关文章

相似问题

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