Fragment笔记
setUserVisibleHint()
设置系统提示是否该片段的用户界面当前是可见的。此提示默认为true,并持久跨片段实例状态保存和还原。
一个应用程序可以设置为false,表明该片段的UI被滚出能见度或没有用户直接可见的。这可用于系统优先次序的操作,如片段生命周期更新或装载机排序行为。
参数
isvisibletouser如果这个片段的用户界面是用户可见的目前(默认),假如不。
该方法用于告诉系统,这个Fragment的UI是否是可见的。所以我们只需要继承Fragment并重写该方法,即可实现在fragment可见时才进行数据加载操作。
onActivityCreated(Bundle)
当Activity的onCreate方法返回时调用
要实现懒加载我们需要写一个抽象类继承Fragment并重写这两个方法
public abstract class LazyLoadFragment extends Fragment {
private boolean isViewInitiated = false; //控件是否初始化完成
private boolean isVisibleToUser = false; //页面是否可见
private boolean isFirstInitiated = true; //是否第一次加载
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
this.isVisibleToUser = isVisibleToUser;
prepareFetchData(false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
isViewInitiated = true;
prepareFetchData(false);
}
protected abstract void onLazyLoad();
protected void fetchData(boolean forceUpdate) {
if (isVisibleToUser && isViewInitiated && (isFirstInitiated || forceUpdate)){
onLazyLoad();
isFirstInitiated = false;
}
}
}