Android開發丶使用懶載入修復tablayout+viewpager+fragment的預載入
何為預載入:
因為該處使用到了Fragment+Viewpager+Tablayout的組合實現分類,因為viewpager V4包的機制,導致了在載入一個fragment時候,預設會載入它左右兩邊的兩個fragment,原始碼顯示是通過viewpager.setoffscreenpagelimit(1)來控制預載入的fragment的數量,該處預設最小值就是1,設為0並無效果,因此從原始碼端取消預載入是行不通的,經過多方調研,通過下面的方法可實現效果
首先新建一個BaseFragment基類,如下:
public abstract class BaseFragment extends Fragment {
public Context mContext;
protected View view;
protected boolean isVisible;
/**
* 是否初始檢視完成
*/
private boolean isPrepared;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = getActivity();
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = bindLayout(inflater);
initView();
return view;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
//這裡 初始化view的各控制元件 資料
isPrepared = true;
lazyLoad();
}
/**
* setUserVisibleHint是在onCreateView之前呼叫的
*
* @param isVisibleToUser
*/
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
/**
* 判斷是否可見
*/
if(getUserVisibleHint()) {
isVisible = true;
//執行可見方法-初始化資料之類
onVisible();
} else {
isVisible = false;
//不可見
onInvisible();
}
}
/**
* 可見做懶載入
*/
private void onVisible() {
lazyLoad();
}
/**
* 懶載入
*/
private void lazyLoad() {
/**
* 判斷是否可見,或者 初始化view的各控制元件
*/
if(!isVisible || !isPrepared) {
return;
}
//可見 或者 控制元件初始化完成 就 載入資料
initData();
}
/**
* 不可見-做一些銷燬工作
*/
protected void onInvisible() {
}
/**
* 繫結佈局
*
* @param inflater
* @return
*/
public abstract View bindLayout(LayoutInflater inflater);
/**
* 初始化佈局
*/
public abstract void initView();
/**
* 初始化資料
*/
protected abstract void initData();
}
該基類Fragment核心方法為:
setUserVisibleHint,在該方法中判斷目標fragment是否可見,當可見的時候執行元件初始化和資料讀取
在目標Fragment繼承BaseFragment
重寫這三個方法
這樣就解決了預載入導致的衝突問題!
相關文章
- tablayout+viewpager+fragment懶載入TabLayoutViewpagerFragment
- Android tabLayout+viewPager+fragment處理懶載入AndroidTabLayoutViewpagerFragment
- TabLayout+ViewPager+fragment實現懶載入TabLayoutViewpagerFragment
- TabLayout+ViewPager+Fragment懶載入實現TabLayoutViewpagerFragment
- 懶載入和預載入
- 圖片預載入和懶載入
- Tablayout+Viewpager+Fragment組合使用以及懶載入機制TabLayoutViewpagerFragment
- 前端效能優化 --- 懶載入&預載入前端優化
- javascript圖片懶載入與預載入的分析JavaScript
- 1道面試題---懶載入和預載入面試題
- TabLayout+ViewPager+Fragment實現懶載入完全解決方案TabLayoutViewpagerFragment
- 頁面圖片預載入與懶載入策略
- [譯] React 16.6 懶載入(與預載入)元件React元件
- iOS開發UI中懶載入的使用方法iOSUI
- 懶載入
- Android 在 ViewPager 中使用 Fragment 的懶載入AndroidViewpagerFragment
- 小說APP原始碼的圖片載入方式,懶載入和預載入的實現APP原始碼
- ECMAScript擴充套件 -12 【圖片的預載入與懶載入】套件
- 懶載入、預載入、with()、load() 傻傻分不清楚?
- Vue 的懶載入Vue
- Android優化--Fragment懶載入Android優化Fragment
- iOS: 懶載入iOS
- Vue 路由按需載入(路由懶載入)Vue路由
- 圖片預載入和懶載入(附上一個小demo瀑布流)
- android viewpager使用Fragment懶載入,滑到當前fragment才進行資料載入AndroidViewpagerFragment
- Vue外掛開發初體驗——(懶載入)Vue
- Laravel Eloquent中的 懶載入VS即時載入Laravel
- 【譯】懶載入元件元件
- 圖片懶載入
- Vue元件懶載入Vue元件
- Ribbon - 懶載入
- vue路由懶載入Vue路由
- Swift中懶載入Swift
- hibernate懶載入
- spring 懶載入Spring
- 什麼是hibernate懶載入?什麼時候用懶載入?為什麼要用懶載入?(轉)
- 圖片預載入,圖片懶載入,和jsonp中的一個疑問JSON
- dva中元件的懶載入元件