懒加载思路
- 在Fragment布局创建的时候调用懒加载方法,创建之后将isViewPrepared设置为true。
/**标记Fragment视图是否已经初始化完毕*/
private boolean isViewPrepared;
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
isViewPrepared = true;
lazyFetchDataIfPrepared();
}
- 在用户可见的方法中判断用否是否可见,如果可见则调用懒加载方法
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser){
lazyFetchDataIfPrepared();
}
}
- 懒加载方法中,判断用户是否可见,判断是否加载过数据,判断是否已经创建成功,如果创建成功,将hasFetchData设置为ture,然后调用lazyFetchData()方法来加载数据,该方法为抽象方法,交给子类实现。
private boolean isViewPrepared;
/**
* 进行懒加载
*/
protected void lazyFetchDataIfPrepared(){
// 用户可见Fragment && 没有加载过数据 && 视图已经准备完毕
if (getUserVisibleHint() && !hasFetchData && isViewPrepared){
hasFetchData = true;
lazyFetchData();
}
}
/**
* 懒加载的方式获取数据,仅在满足Fragment可见和视图已经准备好的时候调用一次
*/
protected abstract void lazyFetchData();