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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • netty什么意思_这篇文章的内容比较优美

    netty什么意思_这篇文章的内容比较优美再有人问你Netty是什么,就把这篇文章发给他

    2022年4月20日
    40
  • pycharm安装程序包_Python不可以安装的软件包

    pycharm安装程序包_Python不可以安装的软件包(1)命令行安装pipinstallXXX或者condainstallXXXXXX为包的名称,命令输入的位置如下图所示(两个均可使用,如果一个安装失败则使用另一个)(2)操作界面安装(i)依次点击file——settings,出现如下界面(2)点击图中+,出现如下界面,在搜索框中输入相应的包的名称,选中后点击installPackage(3)直接根据提示安装打开一个python源程序,在下面画有红色波浪线的均为未安装的包,将光标移动至红色波浪线处,会出现installp

    2022年8月29日
    8
  • Particle_filter 粒子滤波器 的学习笔记

    Particle_filter 粒子滤波器 的学习笔记粒子滤波是一种基于蒙特卡洛模拟的非线性滤波方法,其核心思想是用随机采样的粒子表达概率密度分布。粒子滤波的三个重要步骤为:1)粒子采样,从建议分布中抽取一组粒子;2)粒子加权,根据观测概率分布,重要

    2022年8月6日
    4
  • ps如何激活成功教程安装免费_PS安装教程

    ps如何激活成功教程安装免费_PS安装教程原文:https://blog.csdn.net/lzp2015/article/details/830257611.下载安装包与注册机window下安装包https://pan.baidu.com/s/1VtAdWGJe5gRJiMGRuqoluw2.解压安装注意:如果之前安装过,请确保卸载成功以下是window64位安装教程①双击scrt_sfx732-x64….

    2022年10月21日
    4
  • 深度图像基础知识(一)

    深度图像基础知识(一)深度图像(depthimage)也被称为距离影像(rangeimage),是指将从图像采集器到场景中各点的距离(深度)作为像素值的图像,它直接反映了景物可见表面的几何形状。深度图像经过坐标转换可以计算为点云数据,有规则及必要信息的点云数据也可以反算为深度图像数据。深度数据流所提供的图像帧中,每一个像素点代表的是在深度感应器的视野中,该特定的(x,y)坐标处物体到离摄像头平面最近的

    2022年4月25日
    32
  • WRS是什么?_WRS210L

    WRS是什么?_WRS210L全球参考系(WRS)是为卫星下行数据服务而建立的一种全球符号坐标系统,本文详细介绍了Landsat卫星的轨道特性,给出了相应的WRS网格坐标位置的估算方法,并给出了估算的结果。对该方法的研究为地面应用

    2022年8月4日
    6

发表回复

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

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