解決viewpager+fragment+tablayout的動態重新整理
在開發專案中的時候大多我們為了方便就會使用第三方的控制元件,而在開發的時候相信大家對fragmen的遇到的坑不少吧,今天就為大家講解viewpager+fragment+tablayout如何動態的更新資料:
而在此處我提供兩種方法供大家參考:
1:暴力重新整理:你要動態重新整理資料,在FragmentPagerAdapter中必須實現此方法,並且只能在這個方法裡,不能是getItem。否則呼叫notifyDataSetChanged就沒有效果,
if (pagerAdapter == null) {
pagerAdapter = new NoScrollViewPagerAdapter(getChildFragmentManager());//繼承FragmentPagerAdapter
}
mViewpager.setAdapter(pagerAdapter);
mViewpager.setOffscreenPageLimit(1);
tab.setViewPager(mViewpager);
if (isRefresh) {//是否強制重新整理,此處做判斷
pagerAdapter.setNewFragments();//這是我在FragmentPagerAdapter中定義的重新整理方法,
}
private class NoScrollViewPagerAdapter extends FragmentPagerAdapter {
private List<String> tags;//標示fragment的tag
private FragmentManager fragmentManager;
NoScrollViewPagerAdapter(FragmentManager fm) {
super(fm);
this.tags = new ArrayList<>();
this.fragmentManager = fm;
}
//Fragment的例項化工作
@Override
public Fragment getItem(int position) {
return SortFragment.getInstance(categoryList.get(position).getDictSn(), Fragment.GRABORDER);
}
@Override
public int getCount() {
return categoryList.size();
}
@Override
public CharSequence getPageTitle(int position) {
return categoryList.get(position).getName();
}
//返回PagerAdapter.POSITION_NONE保證呼叫notifyDataSetChanged重新整理Fragment。
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;//必須返回的是POSITION_NONE,否則不會重新整理
}
//這個就不說了
private String makeFragmentName(int viewId, long id) {
return "android:switcher:" + viewId + ":" + id;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
super.destroyItem(container, position, object);
}
//必須重寫此方法,新增tag一一做記錄
@Override
public Object instantiateItem(ViewGroup container, int position) {
tags.add(makeFragmentName(container.getId(), getItemId(position)));
Fragment fragment = (Fragment) super.instantiateItem(container, position);
this.fragmentManager.beginTransaction().show(fragment).commit();
return fragment;
}
//根據tag查詢快取的fragment,移除快取的fragment,替換成新的
public void setNewFragments() {
if (this.tags != null) {
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
for (int i = 0; i < tags.size(); i++) {
fragmentTransaction.remove(fragmentManager.findFragmentByTag(tags.get(i)));
}
fragmentTransaction.commit();
fragmentManager.executePendingTransactions();
tags.clear();
}
notifyDataSetChanged();
}
}
2: 最笨的方法你可以在生命週期中做判斷,哈哈,一般不會這樣做的,除非你實在是沒有辦法了
其實還有一種我就不講了,相信第一種方法已經可以滿足你了,註釋已經十分詳細了,如果還有什麼不懂得歡迎留言,一起探討。
部落格雖短,十分精華,歡迎留言! 》-《相關文章
- Vista 回收站狀態不能自動重新整理的解決辦法
- MRTG子網頁不自動重新整理的解決網頁
- 解決動態庫的符號衝突符號
- 動態sql和利用動態sql解決資料字典的讀取SQL
- vue 動態選單以及動態路由載入、重新整理採的坑Vue路由
- mui的下拉重新整理的用法及其解決雙滾動的辦法UI
- RecyclerView與下拉重新整理控制元件滑動衝突的解決View控制元件
- 動態條件的繫結變數的解決變數
- 配置動態重新整理@RefreshScope引起的取值為nullNull
- Web頁面動態重新整理時間Web
- 波卡生態現行的流動性解決方案
- Ajax的技術核心實現動態無重新整理
- 四步模板解決動態規劃動態規劃
- Win10系統桌面不停閃屏自動重新整理的解決方法Win10
- 委託實現動態時間重新整理
- Windows10資源管理器總是自動重新整理的解決方法Windows
- Struct FORM ACTION 無法解決動態賦值?StructORM賦值
- TabLayout + ViewPager +Fragment 實現頁面的動態重新整理TabLayoutViewpagerFragment
- RxSwift + MJRefresh 自動管理重新整理狀態Swift
- 微信小程式動態載入外部字型的完美解決方案微信小程式
- Go構建遇到cgo動態庫時解決方案Go
- 從“股票問題”談動態規劃問題的解決思路動態規劃
- Vue動態路由快取不相互影響的解決辦法Vue路由快取
- 用Proxy 在 Vue 中解決動態載入資料的需求Vue
- PHP動態編譯出現Cannot find autoconf的解決方法PHP編譯
- 統計報表中動態增加列的解決方法之一
- MyBatis使用Zookeeper儲存資料庫的配置,可動態重新整理MyBatis資料庫
- 利用PCT解決快速重新整理效能問題
- iview 下拉重新整理loadTop報錯解決View
- vuex配sessionStorage進行自動儲存,解決重新整理資料丟失的問題。VueSession
- 快照庫MV不能成功重新整理問題的解決
- 如何使用 DAX 函式解決動態圖表標題函式
- Linux 動態庫 undefined symbol 原因定位與解決方法LinuxUndefinedSymbol
- 應用動態規劃思想解決實際問題動態規劃
- apollo與springboot整合實現動態重新整理配置Spring Boot
- 手拉手,用Vue開發動態重新整理Echarts元件VueEcharts元件
- Android -下拉重新整理,ViewPager和ScrollView巢狀滾動問題解決方案AndroidViewpager巢狀
- windows10系統下動態磁貼不更新的解決方法Windows