首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >FragmentPagerAdapter notifyDataSetChanged不工作

FragmentPagerAdapter notifyDataSetChanged不工作
EN

Stack Overflow用户
提问于 2015-05-06 14:43:51
回答 6查看 28.8K关注 0票数 45

我得到了一个FragmentPagerAdapter。它的getItem方法可以根据来自外部的数据返回一个片段。在我更新数据之后,它应该显示出来,然后调用notifyDataSetChanged,但是什么也没有发生。我确实重写了getItemPosition方法以返回POSITION_NONE

代码语言:javascript
运行
复制
public static class TabsAdapter extends FragmentPagerAdapter implements TabHost.OnTabChangeListener,
        ViewPager.OnPageChangeListener
{
    private final Context mContext;
    private final TabHost mTabHost;
    private final ViewPager mViewPager;
    private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>();
    private PagerTabsFragments fragmentDisplayInfo = null; // for now only a
                                                            // single size
                                                            // back
                                                            // stack

    static class PagerTabsFragments
    {
        public int tabPosition;
        public Fragment fragmentToDisplay;
        public Object fragmentInfo;

        public PagerTabsFragments(int tab, Fragment frag, Object info)
        {
            tabPosition = tab;
            fragmentToDisplay = frag;
            fragmentInfo = info;
        }
    }

    public void SetFragmentToDisplay(int tabPosition, Fragment frag, Object info)
    {
        fragmentDisplayInfo = new PagerTabsFragments(tabPosition, frag, info);
        notifyDataSetChanged();
    }

    public void CancelFragmentToDisplay()
    {
        fragmentDisplayInfo = null;
    }
...
@Override
    public Fragment getItem(final int position)
    {
        if ((fragmentDisplayInfo != null) && (fragmentDisplayInfo.tabPosition == position))
        {
            return fragmentDisplayInfo.fragmentToDisplay;
        }
        final TabInfo info = mTabs.get(position);
        return Fragment.instantiate(mContext, info.clss.getName(), info.args);
    }

    @Override
    public int getItemPosition(Object item)
    {
        if (fragmentDisplayInfo == null)
        {
            return super.getItemPosition(item);
        }
        return POSITION_NONE;
    }
...

来自外部的更新位于一个单击事件中,该事件设置了fragmentDisplayInfo变量。我调试并看到fragmentDisplayInfo确实被初始化了,getItemPosition方法确实返回了POSITION_NONE,但是getItem方法甚至没有被调用。为什么会这样呢?

编辑:

如果您还没有这样做,请注意适配器的overiden部分:

代码语言:javascript
运行
复制
 @Override
public int getItemPosition(Object item)
{
    return POSITION_NONE;
}
EN

Stack Overflow用户

发布于 2018-04-06 19:14:34

上面给出的解决方案对我都没有用。因此,希望下面的解决方案可能对你有帮助。

在我的代码中,viewPager中有两个片段。一个用于3个EditTexts和1个按钮,另一个片段具有RecyclerView。在单击按钮时,我的值将转到recyclerView,但它没有更新。现在,我使用了以下代码:

我调用了notifyDataSetChanged()的按钮单击。我的MainActivity有内部适配器类扩展FragmentStatePagerAdapter类。希望它能帮到别人。

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

https://stackoverflow.com/questions/30080045

复制
相关文章

相似问题

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