在項目中太示,如果使用了ViewPager + Tablayout + 多個fragment 的形式的時候诲宇,一般就需要進行懶加載設(shè)置了籽前。
主要原因:
1-ViewPager會默認初始化當前fragment前后的多個fragment隘冲,導致多次創(chuàng)建和請求數(shù)據(jù)
2-如果用戶只需要查看當前fragment的內(nèi)容,而不進行滑動的時候奢入,此時如果不設(shè)置懶加載,會導致多請求數(shù)據(jù)媳叨,造成流量的浪費腥光。
設(shè)置懶加載:
- 思路:設(shè)置2個標記,一個用于檢查View是否創(chuàng)建完成 一個用于判斷當前Fragment是否顯示
當以上2個條件同時滿足的時候糊秆,進行數(shù)據(jù)請求并加載武福。 - 案例:
public abstract class BaseFragment extends Fragment {
//Fragment的View加載完畢的標記
private boolean isViewCreated;
//Fragment對用戶可見的標記
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這個boolean值表示:該Fragment的UI 用戶是否可見
if (isVisibleToUser) {
isUIVisible = true;
lazyLoad();
} else {
isUIVisible = false;
}
}
private void lazyLoad() {
//對上面2個條件判斷,是因為setUserVisibleHint會多次回調(diào),并且會在onCreateView執(zhí)行前回調(diào),必須確保onCreateView加載完畢且頁面可見,才加載數(shù)據(jù)
if (isViewCreated && isUIVisible) {
//自定義加載數(shù)據(jù)的方法
onLazyLoadData();
//數(shù)據(jù)加載完畢,恢復標記,防止重復加載
isViewCreated = false;
isUIVisible = false;
}
}
}