日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

FragmentPagerAdapter实现刷新

發布時間:2024/7/23 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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实现刷新的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。