FragmentPagerAdapter实现刷新
生活随笔
收集整理的這篇文章主要介紹了
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
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的FragmentPagerAdapter实现刷新的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python实现统计你一共写了多少行代码
- 下一篇: 【每日SQL打卡】