Fragment的懶加載

在項(xiàng)目中,如果使用了ViewPager + Tablayout + 多個(gè)fragment 的形式的時(shí)候,一般就需要進(jìn)行懶加載設(shè)置了。

主要原因:
1-ViewPager會默認(rèn)初始化當(dāng)前fragment前后的多個(gè)fragment,導(dǎo)致多次創(chuàng)建和請求數(shù)據(jù)
2-如果用戶只需要查看當(dāng)前fragment的內(nèi)容,而不進(jìn)行滑動的時(shí)候,此時(shí)如果不設(shè)置懶加載,會導(dǎo)致多請求數(shù)據(jù),造成流量的浪費(fèi)。

設(shè)置懶加載:

  1. 思路:設(shè)置2個(gè)標(biāo)記,一個(gè)用于檢查View是否創(chuàng)建完成 一個(gè)用于判斷當(dāng)前Fragment是否顯示
    當(dāng)以上2個(gè)條件同時(shí)滿足的時(shí)候,進(jìn)行數(shù)據(jù)請求并加載。
  2. 案例:
public abstract class BaseFragment extends Fragment {

   //Fragment的View加載完畢的標(biāo)記
    private boolean isViewCreated;
    //Fragment對用戶可見的標(biāo)記
    private boolean isUIVisible;
    
    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        isViewCreated = true;
        lazyLoad();
    }

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);

        //isVisibleToUser這個(gè)boolean值表示:該Fragment的UI 用戶是否可見
        if (isVisibleToUser) {
            isUIVisible = true;
            lazyLoad();
        } else {
            isUIVisible = false;
        }
    }
  
     private void lazyLoad() {
        //對上面2個(gè)條件判斷,是因?yàn)閟etUserVisibleHint會多次回調(diào),并且會在onCreateView執(zhí)行前回調(diào),必須確保onCreateView加載完畢且頁面可見,才加載數(shù)據(jù)
        if (isViewCreated && isUIVisible) {
            //自定義加載數(shù)據(jù)的方法
            onLazyLoadData();
            //數(shù)據(jù)加載完畢,恢復(fù)標(biāo)記,防止重復(fù)加載
            isViewCreated = false;
            isUIVisible = false;
        }
    }

}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容