Fragment的resume和onPause是依賴於Activity的;不是真正的狀態
應用場景:viewPager+Fragment+ListView中
viewPager緩存左右兩個頁面,會刷新listview數據,
直接改變當前的listview,出現錯誤,加載異常等問題;
實現:
public abstract class LazyFragment extends BaseFragment {
protected boolean isVisible;
// 標誌位,標誌已經初始化完成。
private boolean isPrepared = false;
@Override
protected void initViewsAndEvents() {
isPrepared = true;
//第一個顯示的頁面,會先觸發懶加載,此處必須重新加載
onVisible();
}
/**
* 在這裏實現Fragment數據的緩加載.
*/
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (getUserVisibleHint()) {
isVisible = true;
onVisible();
} else {
isVisible = false;
onInvisible();
}
}
protected void onVisible() {
if (isPrepared) {
Log.d(this.getClass().getName(), "---lazyLoad----");
lazyLoad();
}
}
protected abstract void lazyLoad();
protected void onInvisible() {
}
}