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)
上一篇 2022年6月24日 下午11:46
下一篇 2022年6月24日 下午11:46


相关推荐

  • VS2019+OpenCV安装与配置教程

    VS2019+OpenCV安装与配置教程目录VS2019的下载安装OpenCV的下载安装OpenCV的配置配置系统变量给VS中的工程一键配置OpenCV测试配置的效果最近要用到很多OpenCV的库,所以开始学了点OpenCV,本文记录VS和OpenCV的安装、配置过程。配置OpenCV使用配置文件的方法,配置完一次就可以给其他工程使用,非常方便。VS2019的下载安装这里有VisualStudio2019的详细教程,社区版是免费使用的,登录一下微软账户就行。OpenCV的下载安装OpenCV下载链接。我装的是4.3、Window

    2022年6月24日
    50
  • 计算矩阵的欧式距离

    计算矩阵的欧式距离对于 kNN 算法 难点在于计算测试集中每一样本到训练集中每一样本的欧氏距离 即计算两个矩阵之间的欧氏距离 现就计算欧式距离提出三种方法 1 两层循环分别对训练集和测试集中的数据进行循环遍历 计算每两个样本之间的欧式距离 此算法没有经过任何优化 importnumpya 1 np array 1 2 3 4 5 6

    2026年3月16日
    2
  • 阿里千问发布 Qwen3-Coder-Next:低推理成本编程智能体模型

    阿里千问发布 Qwen3-Coder-Next:低推理成本编程智能体模型

    2026年3月13日
    2
  • 第一个免杀花指令生成器–不简单的免杀工具(图)

    第一个免杀花指令生成器–不简单的免杀工具(图)第一个免杀花指令生成器–不简单的免杀工具(图)陆续将以前发表在杂志的文章放上来~,发表于《黑客X档案》,第几期忘了,呵呵前言相信做过免杀的朋友都知道花指令吧。加花指令是一种不错的文件免杀方法,而网上公布的花指令和花指令添加器因为里边的花指令被公布了,所以免杀效果不好。有点汇编基础的人就写自己的花指令,但写花指令的过程比较烦,所以我萌生了写一个花指令生成器的想法,首

    2022年8月20日
    8
  • Calling Matlab function from python: “initializer must be a rectangular nested sequence”

    Calling Matlab function from python: “initializer must be a rectangular nested sequence”

    2021年11月21日
    55
  • SpringBoot整合Shiro安全框架完整实现

    SpringBoot整合Shiro安全框架完整实现目录一 环境搭建 1 导入 shiro spring 依赖 2 编写首页及其 controller3 编写 shiro 配置类二 Shiro 实现登录拦截 1 编写页面及其 controller2 实现登录拦截 3 编写拦截后的登录页面三 Shiro 实现用户认证四 整合 MyBatis1 导入依赖 2 创建数据库 amp 连接 3 配置数据源 4 编写 pojo 实体类 5 编写 Mapper 层 6 编写 service 层 可省略 7 测试 8 更改伪造数据为真实数据五 Shiro 请求授权实现 1 添加授权 2 编写未授

    2026年3月18日
    1

发表回复

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

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