FragmentPagerAdapter刷新notifyDataSetChanged无效

FragmentPagerAdapter刷新notifyDataSetChanged无效网络上会提到pageadapter的刷新方案如下代码: 复写pageradapter的getItemPosition方法设置tag为POSITION_NONE意思是没有找到child要求重新加载。@Override publicintgetItemPosition(Objectobject){   returnPOSITION_NONE; } 结果

大家好,又见面了,我是你们的朋友全栈君。

网络上会提到pageadapter的刷新方案如下代码:

复写pageradapter的getItemPosition方法设置tag为POSITION_NONE意思是没有找到child要求重新加载。

<span style="font-size:18px;">@Override  
public int getItemPosition(Object object) { 
   return POSITION_NONE; 
}  </span>

结果你发现是刷新了一下但内容还是原始的数据。通过对fragmentpageadapter的源码查看你会在instantiateItem方法里面发现这一段
 

       String name =makeFragmentName(container.getId(), position);
       Fragment fragment =mFragmentManager.findFragmentByTag(name);
       if (fragment != null) {
           if (DEBUG)Log.v(TAG, "Attaching item #" + position + ": f=" +fragment);
          mCurTransaction.attach(fragment);
       } else {
           fragment =getItem(position);
           if (DEBUG)Log.v(TAG, "Adding item #" + position + ": f=" +fragment);
          mCurTransaction.add(container.getId(), fragment,
                 makeFragmentName(container.getId(),position));
       }

原来他会先去FragmentManager里面去查找有没有相关的fragment如果有就直接使用如果没有才会触发fragmentpageadapter的getItem方法获取一个fragment。所以你更新的fragmentList集合是没有作用的,还要清除FragmentManager里面缓存的fragment。解决办法:在继承的fragmentpageadapter类里面添加这么一个方法

<span style="font-size:18px;">public voidsetFragments(ArrayList fragments) {   if(this.fragments !=null){     FragmentTransaction ft = fm.beginTransaction();     for(Fragment f:this.fragments){       ft.remove(f);     }     ft.commit();     ft=null;     fm.executePendingTransactions();   }  this.fragments = fragments;  notifyDataSetChanged();}</span>

就能完美的解决fragmentpageadapter数据刷新。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/149096.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mysql读写分离的意义_MySQL读写分离

    mysql读写分离的意义_MySQL读写分离如何实现mysql的读写分离?就是基于主从复制架构,简单来说,就搞一个主库,挂多个从库,然后我们就单单只是写主库,然后主库会自动把数据给同步到从库上去。MySQL主从复制原理的是啥?主库将变更写binlog日志,然后从库连接到主库之后,从库有一个IO线程,将主库的binlog日志拷贝到自己本地,写入一个中继日志中。接着从库中有一个SQL线程会从中继日志读取binlog,然后执行binlog日志中的…

    2022年6月13日
    25
  • dataframe填充缺失值_pandas填充空值

    dataframe填充缺失值_pandas填充空值如果单独是>>>df.fillna(0)>>>print(df)#可以看到未发生改变>>>print(df.fillna(0))#如果直接打印是可以看到填充进去了>>>print(df)#但是再次打印就会发现没有了,还是Nan将其Nan全部填充为0,这时再打印的话会发现根本未填充,这是因…

    2022年8月12日
    5
  • python计算坐标点欧式距离_计算Python Numpy向量之间的欧氏距离实例

    python计算坐标点欧式距离_计算Python Numpy向量之间的欧氏距离实例计算PythonNumpy向量之间的欧氏距离,已知vec1和vec2是两个Numpy向量,欧氏距离计算如下:importnumpydist=numpy.sqrt(numpy.sum(numpy.square(vec1-vec2)))或者直接:dist=numpy.linalg.norm(vec1-vec2)#补充知识:Python中计算两个数据点之间的欧式距离,一个点到数据集中其他点的距离之和#如下所示:#计算数两个数据点之间的欧式距离importn

    2022年6月19日
    53
  • objective c源码_以下C代码有哪些错误

    objective c源码_以下C代码有哪些错误我是前言看开源代码时,总会看到一些大神级别的代码,给人眼前一亮的感觉,多数都是被淡忘的C语言语法,总结下objc写码中遇到的各类非主流代码技巧和一些妙用:[娱乐向]objc最短的方法声明[C]结构体的初始化[C]三元条件表达式的两元使用[C]数组的下标初始化[objc]可变参数类型的block[objc]readonly属性支持扩展的写法[C]小括号内联复合表达式[娱乐向]奇葩的C

    2022年10月18日
    3
  • 北航计算机考研有多难_北京航空航天大学录取分数线2021

    北航计算机考研有多难_北京航空航天大学录取分数线2021文/最爱生活截止到现在,高考的志愿填报工作已经陆陆续续结束,各个高校也开始进行了录取工作。最近也有一部分省份开始公布了一些提前批次招录的投档分数线,同学们也将会陆陆续续的接受到自己理想中大学的录取通知书。目前,又有两个省份开始公布了本省份的提前批次投档分数线,分别是贵州省以及新疆维吾尔自治区。在这两个省份公布出提前批次的录取分数线之后,在网上也是一石激起千层浪,不少“惊喜”的事情也在发生,不少网友…

    2025年11月3日
    3
  • Device 与 platform device的不同(一)[通俗易懂]

    Device 与 platform device的不同(一)[通俗易懂]Device与platformdevice在注册方法上有所不同。Device注册有两步,platformdevice注册也有两步,它们第一步相同,都是initialize设备,但第二步有所不同,Device是直接调用device_add()函数来add设备,而platformdevice则调用platform_device_add()函数。实际上,platfo

    2022年7月24日
    14

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号