解決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: 最笨的方法你可以在生命週期中做判斷,哈哈,一般不會這樣做的,除非你實在是沒有辦法了
其實還有一種我就不講了,相信第一種方法已經可以滿足你了,註釋已經十分詳細了,如果還有什麼不懂得歡迎留言,一起探討。
部落格雖短,十分精華,歡迎留言! 》-《相關文章
- 解決動態庫的符號衝突符號
- vue 動態選單以及動態路由載入、重新整理採的坑Vue路由
- 配置動態重新整理@RefreshScope引起的取值為nullNull
- Win10系統桌面不停閃屏自動重新整理的解決方法Win10
- 四步模板解決動態規劃動態規劃
- 波卡生態現行的流動性解決方案
- iview 下拉重新整理loadTop報錯解決View
- TabLayout + ViewPager +Fragment 實現頁面的動態重新整理TabLayoutViewpagerFragment
- apollo與springboot整合實現動態重新整理配置Spring Boot
- 利用PCT解決快速重新整理效能問題
- Go構建遇到cgo動態庫時解決方案Go
- Linux 動態庫 undefined symbol 原因定位與解決方法LinuxUndefinedSymbol
- 微信小程式動態載入外部字型的完美解決方案微信小程式
- Android6.0動態許可權最簡單的解決方法Android
- 從“股票問題”談動態規劃問題的解決思路動態規劃
- Vue動態路由快取不相互影響的解決辦法Vue路由快取
- vuex配sessionStorage進行自動儲存,解決重新整理資料丟失的問題。VueSession
- MyBatis使用Zookeeper儲存資料庫的配置,可動態重新整理MyBatis資料庫
- vuex頁面重新整理資料丟失的解決辦法Vue
- 解決瀏覽器返回頁面不重新整理的問題瀏覽器
- Vuex持久化外掛-解決重新整理資料消失的問題Vue持久化
- windows10系統下動態磁貼不更新的解決方法Windows
- 如何使用 DAX 函式解決動態圖表標題函式
- 手拉手,用Vue開發動態重新整理Echarts元件VueEcharts元件
- C#-INotifyPropertyChanged(解決資料繫結的介面重新整理問題)C#
- Java後端微服務架構下的配置動態重新整理:Spring Cloud BusJava後端微服務架構SpringCloud
- SAP Fiori 頁面的週期性動態重新整理功能的實現步驟
- 解決vue-router addRoutes路由不重新整理問題Vue路由
- 解決 Retrofit 多 BaseUrl 及執行時動態改變 BaseUrl ?
- 動態生成html元素繫結事件iphone失效問題解決HTML事件iPhone
- 動態脫敏落地不再難,昂楷助您輕鬆解決!
- 浮動坍塌的解決方案
- Mybatis動態傳入order by 引數的時候不生效的問題解決方案MyBatis
- JQuery on()方法繫結動態元素的點選事件無響應的解決辦法jQuery事件
- 靜態測試解決方案
- Java反射動態修改註解的值Java反射
- proteus模擬數碼管無法動態顯示的問題-解決方法
- 靈光一閃!幫你使用Vue,搞定無法解決的“動態掛載”Vue