FragmentPagerAdapter实现刷新
来源:互联网 发布:软件中心 编辑:程序博客网 时间:2024/06/01 10:43
在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; } @Override public Fragment getItem(int position) { return mFragments.get(position); } @Override public Object instantiateItem(ViewGroup container, int position) { //得到缓存的fragment Fragment fragment = (Fragment) super.instantiateItem(container, position); //得到tag,这点很重要 String fragmentTag = fragment.getTag(); if (fragmentsUpdateFlag[position % fragmentsUpdateFlag.length]) { //如果这个fragment需要更新 FragmentTransaction ft = fm.beginTransaction(); //移除旧的fragment ft.remove(fragment); //换成新的fragment fragment = 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; } @Override public int getCount() { return mFragments.size(); } @Override public CharSequence getPageTitle(int position) { return titles[position]; }}
参考链接
FragmentPagerAdapter刷新fragment最完美解决方案 - z13759561330的专栏 - 博客频道 - CSDN.NET
0 0
- FragmentPagerAdapter实现刷新
- FragmentPagerAdapter刷新
- FragmentPagerAdapter 刷新
- FragmentPagerAdapter,实现fragment的数据刷新
- FragmentPagerAdapter刷新fragment
- FragmentPagerAdapter刷新notifyDataSetChanged无效
- ViewPager+FragmentPagerAdapter刷新
- FragmentPagerAdapter强制刷新
- Android FragmentPagerAdapter 数据刷新问题
- FragmentPagerAdapter刷新Fragment终极解决方案
- 完美解决FragmentPagerAdapter刷新问题
- FragmentPagerAdapter刷新fragment记两点
- FragmentPagerAdapter实现分页
- FragmentPagerAdapter刷新fragment最完美解决方案
- FragmentPagerAdapter无法刷新的最简单解决办法
- FragmentPagerAdapter刷新fragment最完美解决方案
- 笔记:ViewPager+FragmentPagerAdapter数据刷新问题
- ViewPager+Fragment+FragmentPagerAdapter,设置自定义刷新
- 大家好啊
- 程序员之所以犯错误,不是因为他们不懂,而是因为他们自以为什么都懂。
- 第十五周补充程序
- 《JavaScript学习笔记》:键盘事件
- 每天转篇技术贴——BMP文件结构的探索
- FragmentPagerAdapter实现刷新
- dp+贪心+滚动数组优化——植物大战僵尸
- 自然语言处理方法---TF-IDF
- Generator 函数的含义与用法
- SQL模型类-QSqlTableModel模型
- POJ-1426-Find The Multiple(BFS DFS)
- poj 3678
- 移植Busybox
- 【CG物理模拟系列】流体模拟--粒子法之SPH法的加权函数计算