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数据刷新。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 从零开始安装VMwareTools的详细步骤[通俗易懂]

    从零开始安装VMwareTools的详细步骤[通俗易懂]从零开始安装VMwareToolsVMwareTools是VMware虚拟机中自带的一种工具,相当于VirtualBox中的增强功能(SunVirtualBoxGuestAdditions),是VMware提供的增强虚拟显卡和硬盘性能、以及同步虚拟机与主机时钟的驱动程序。它的功效不仅仅如此,我们可以通过它进行虚拟机和物理机之间的文件传输的,前提是我们要先安装它。那到底怎么安装VMware…

  • js将时间戳转化为年月日时分秒_时间戳转换成日期

    js将时间戳转化为年月日时分秒_时间戳转换成日期/***时间戳转化为年月日时分秒*@param{*}number传入时间戳*@param{*}format返回格式,支持自定义,但参数必须与formateArr里保持一致*@returns*/exportconstformatTime=(number,format)=&amp;amp;gt;{letformateArr=[‘Y’,’M’…

  • linux抓取snmp trap告警命令,linux snmptrap的发送与接收

    linux抓取snmp trap告警命令,linux snmptrap的发送与接收linuxsnmptrap的发送与接收由于需要管理服务器的一些参数,比如CPU使用率,IOwait之类的指标,管理方通过snmpwalk进行五分钟一次对受管服务器的轮询。此类指标为业务指标,是必须了解的一些参数,另需要有告警指标信息。但由于告警信息一般是由受管服务器进行主动告警,这时候就不能通过管理方主动使用snmpwalk来进行,而是由受管服务器通过snmptrap进行。以下是对双方进行snm…

  • 安卓手机4g网络慢如何设置(手机连接4g却不能上网)

    5G时代即将来临为啥,我还要写这篇文章呢?5G想要普及还要再等多一段时间,目前4G还是我们使用网络的主流,所以我今天我来关爱一下我们的4G网络。先来了解一下4G的标准网速,按照4G技术标准,静态、行人的网络速率125MB/s(1Gbps)、高速移动状态下125KB/s才算得上4G。然后对照一下自己的手机网速,你会发现在我们日常生活中我们的网速往往达不到这个所谓标准,是不是说4G就骗我们…

  • mysql connectionstrings_「connectionstrings」C#连接数据库时Appsettings 与connectionStrings的区别 – seo实验室…

    mysql connectionstrings_「connectionstrings」C#连接数据库时Appsettings 与connectionStrings的区别 – seo实验室…connectionstrings一、.APPsettings与connectionStrings的区别,它俩都是App.config中的两个元素;AppSettings是ASP.NET1.1时期用的,在.NETFramework2.0中,新增了ConnectionStrings.1.Appsettings:存放自定义应用程序设置,如文件路径等;connectionStrings:专门用来存放…

  • nginx源代码分析–读请求主体(1)

    nginx源代码分析–读请求主体(1)

发表回复

您的电子邮箱地址不会被公开。

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