FragmentPagerAdapter实现刷新

在fragmentpageadapter的instantiateItem方法里,他会先去FragmentManager里面去查找有没有相关的fragment如果有就直接使用如果没有才会触发fragmentpageadapter的getItem方法获取一个fragment。所以你更新fragments集合是没有作用的。

所以要用新的方法实现刷新功能

主要思路

就是用新的fragment替换FragmentManager里缓存的旧的fragment,

在系统的代码中

        String name = makeFragmentName(container.getId(), position);Fragment fragment = mFragmentManager.findFragmentByTag(name);

说明fragmentpageadapter内部是用tag识别fragment的,并且有它自己的一套算法用于生成tag,所以创建是它已经有了自己的tag,不用我们赋值。

所以我们这里必须用它生成的tag来添加新的fragment,否则fragmentpageadapter就无法识别这个新的fragment。

实例

更换fragment

List<Fragment> fragments = new ArrayList<>();fragments.add(new PoliceFragment());fragments.add(new GirlFragment());fragments.add(new ThirdFragment());boolean[] fragmentsUpdateFlag = { false, false, true};TabsPagerAdapter adapter = new TabsPagerAdapter(getSupportFragmentManager(), fragments,fragmentsUpdateFlag);mVP.setAdapter(adapter);mVP.getAdapter().notifyDataSetChanged();mTab.setupWithViewPager(mVP);

自定义Adapter的实现

package com.zj.adapter;import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.FragmentTransaction;
import android.view.ViewGroup;import java.util.List;/*** Created by CoXier on 2016/5/2.*/public class TabsPagerAdapter extends FragmentPagerAdapter {List<Fragment>  mFragments;FragmentManager fm;private int curUpdatePager;String[] titles = {"警察风采","在逃嫌犯","新闻资讯"};boolean[] fragmentsUpdateFlag;public TabsPagerAdapter(FragmentManager fm, List<Fragment> mFragments,boolean[] fragmentsUpdateFlag) {super(fm);this.fm=fm;this.mFragments = mFragments;this.fragmentsUpdateFlag=fragmentsUpdateFlag;}@Overridepublic Fragment getItem(int position) {return mFragments.get(position);}@Overridepublic Object instantiateItem(ViewGroup container, int position) {//得到缓存的fragmentFragment fragment = (Fragment) super.instantiateItem(container,position);//得到tag,这点很重要String fragmentTag = fragment.getTag();if (fragmentsUpdateFlag[position % fragmentsUpdateFlag.length]) {//如果这个fragment需要更新FragmentTransaction ft = fm.beginTransaction();//移除旧的fragmentft.remove(fragment);//换成新的fragmentfragment = mFragments.get(position % mFragments.size());//添加新fragment时必须用前面获得的tag,这点很重要ft.add(container.getId(), fragment, fragmentTag);ft.attach(fragment);ft.commit();//复位更新标志fragmentsUpdateFlag[position % fragmentsUpdateFlag.length] = false;}return fragment;}@Overridepublic int getCount() {return mFragments.size();}@Overridepublic CharSequence getPageTitle(int position) {return titles[position];}
}

参考链接

FragmentPagerAdapter刷新fragment最完美解决方案 - z13759561330的专栏 - 博客频道 - CSDN.NET

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/494039.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

贝索斯专访:亚马逊帝国大规模业务转型的秘诀

来源&#xff1a;机器之能摘要&#xff1a;这篇文章简明、清晰地揭示出这家似乎没有边界、无拘束公司成功「转身」背后的逻辑与秘诀。与美国的其它科技业巨头不同&#xff0c;亚马逊并没有一个总的企业园区。在其全球的 57.5 万名雇员中&#xff0c;有 4.5 万名员工和管理人员位…

Oracle Stream Replication技术

Stream 是Oracle 的消息队列(也叫Oracle Advanced Queue)技术的一种扩展应用。 Oracle 的消息队列是通过发布/订阅的方式来解决事件管理。流复制(Stream replication)只是基于它的一个数据共享技术&#xff0c;也可以被用作一个可灵活定制的高可用性方案。 它可以实现两个数据库…

Android下拉刷新效果实现

本文主要包括以下内容 自定义实现pulltorefreshView使用google官方SwipeRefreshLayout 下拉刷新大致原理 判断当前是否在最上面而且是向下滑的&#xff0c;如果是的话&#xff0c;则加载数据&#xff0c;并更新界面。 自定义实现pulltorefreshView package com.jimstin.…

2018及过去20年诺贝尔化学奖获奖者及其贡献!

来源&#xff1a;科学网摘要&#xff1a;2018及过去20年诺贝尔化学奖获奖者及其贡献&#xff01;2018年诺贝尔化学获的获得者为美国科学家Frances H. Arnold, George P. Smith和英国科学家George P.Winter&#xff0c;他们利用进化的力量为人类造福。获奖的内容分别是研究酶的定…

RxJava学习入门

RxJava是什么 一个词&#xff1a;异步。 RxJava 在 GitHub 主页上的自我介绍是 “a library for composing asynchronous and event-based programs using observable sequences for the Java VM”&#xff08;一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序…

解读2018年诺贝尔化学奖成果:用进化的力量解决化学问题

来源&#xff1a;新华网摘要&#xff1a;新华社斯德哥尔摩&#xff11;&#xff10;月&#xff13;日电 科普&#xff1a;用进化的力量解决化学问题——解读&#xff12;&#xff10;&#xff11;&#xff18;年诺贝尔化学奖成果地球的生命经过长期进化最终获得强大的适应力&am…

在win8下安装使用java及在win8下部署java环境变量-图文

为了反编译APK&#xff0c;不得不安装一些Androidfby、apktool1.4.1、dex2jar-0.0.9.9等&#xff0c;甚至连DW也安装了&#xff0c;但是我的电脑是win8X64的&#xff0c;也就是64位的win8系统&#xff0c;这就有点头疼了&#xff0c;出现了&#xff1a; 不是内部或外部命令&…

国际运营商智慧城市探索与实践

来源&#xff1a;中国信息通信研究院CAICT摘要&#xff1a;AT&T、SKT、沃达丰在智慧城市领域探索的经验。2008年11月&#xff0c;IBM提出“智慧地球” 理念引发产业界热议&#xff0c;2010年&#xff0c;该公司进一步提出“智慧城市”愿景作为“智慧地球”在城市运营中的具…

Retrofit学习入门

Retrofit的使用 设置权限与添加依赖 定义请求接口通过创建一个retrofit生成一个接口的实现类(动态代理)调用接口请求数据 设置权限与添加依赖 权限&#xff1a;首先确保在AndroidManifest.xml中请求了网络权限 &#xff1a; <uses-permission android:name"android…

centos安装--两张光盘

不是有两个ISO吗&#xff1f;你在别的电脑上打开第二个iso&#xff0c;就可以看到里面是openoffice的语言包。你安装的时候出现的提示是找不到“openoffice.org-langpack-zh-TW-3.1.1-19.5.el5_5.6.i386.rpm”&#xff0c;这个包就在第二个iso里面。但是&#xff0c;即使安装到…

Retrofit与RXJava整合

Retrofit 除了提供了传统的 Callback 形式的 API&#xff0c;还有 RxJava 版本的 Observable 形式 API。下面我用对比的方式来介绍 Retrofit 的 RxJava 版 API 和传统版本的区别。 以获取一个 User 对象的接口作为例子。使用Retrofit 的传统 API&#xff0c;你可以用这样的方式…

消除疑虑

这要从何说起?有时候我们觉得我们自已很强大,可以学会很多东西,可以做很多事情.无论从逻辑还是环境去考虑,都有可行性. 但是:"我们心中有疑虑" 这不是我们不够自信,而是还没有完全的把握可以战胜敌人,当然这个敌人是假想敌,或者说阻碍我们前进的东西.又或者我们感觉…

autotools入门笔记(一)

GNU autotools作用&#xff1a;收集系统配置信息并自动生成Makefile文件。 GNU autotools主要包括三个工具&#xff1a;autoconf、automake、libtool&#xff0c;还有很多辅助的工具&#xff0c;包括&#xff1a;autoheader、aclocal、autoscan。 ● autoscan检测源文件生成con…

本田、大众宣布智能路口研究新进展 以安全为重点

编译&#xff1a;网易智能摘要&#xff1a;每年&#xff0c;在十字路口发生的交通事故约占交通事故死亡人数的20%&#xff0c;这就是为什么汽车制造商和供应商都下定决心要创造出智能的十字路口&#xff0c;利用尖端技术来减少&#xff08;或者最好是能够避免&#xff09;在十字…

Volley学习总结

本文主要包括以下内容 volly基本操作(String与Json类型) volly图片操作 自定义volly volly源码分析 Volley简单易用&#xff0c;在性能方面也进行了大幅度的调整&#xff0c;它的设计目标就是非常适合去进行数据量不大&#xff0c;但通信频繁的网络操作&#xff0c;而对于大…

vimtutor

在shell命令行下输入vimtutor将出现本教程。 欢 迎 阅 读 《 V I M 教 程 》 —— 版本 1.5 vim 是一个具有很多命令的功能非常强大的编辑器。限于篇幅&#xff0c;在本教程当中 就不详细介绍了。本教程的设计目标是讲述一些必要…

智能连接:5G、AI和IoT的组合如何改变美洲

来源&#xff1a;199IT互联网数据中心摘要&#xff1a;GSMA发布了新报告“智能连接&#xff1a;5G、AI和IoT的组合如何改变美洲”&#xff0c;强调了该地区如何从这些科技中受益。GSMA Intelligence预测&#xff0c;到2025年全球5G连接数量将达到13亿&#xff0c;覆盖全球40%的…

刚刚,生物学横扫诺贝尔3大奖,两名女性获奖!化学奖授予试管中的“进化论”...

来源&#xff1a;Deeptech深科技北京时间 10 月 3 日下午 5 点 45 分&#xff0c;2018 诺贝尔化学奖揭晓——诺贝尔委员会宣布&#xff0c;将此奖项一半颁给女科学家Frances H. Arnold&#xff0c;另一半则由George P. Smith、 Gregory P. Winter两人共享。此次诺贝尔化学奖表彰…

MACIOS Socket编程

转自 https://github.com/kejinlu/objc-doc/blob/master/Socket%E7%BC%96%E7%A8%8B.md 大纲 一.Socket简介二.BSD Socket编程准备 1.地址2.端口3.网络字节序4.半相关与全相关5.网络编程模型三.socket接口编程示例四.使用select五.使用kqueue六.使用流注:文档中设计涉及的代码也…

Android缓存学习入门

本文主要包括以下内容 利用LruCache实现内存缓存 利用DiskLruCache实现磁盘缓存 LruCache与DiskLruCache结合实例 利用了缓存机制的瀑布流实例 内存缓存的实现 public class PhotoWallAdapter extends ArrayAdapter<String> implements OnScrollListener {/*** 记录…