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) {
LogUtil.d(this.getClass().getName() +"---lazyLoad----");
lazyLoad();
}
}
protected abstract void lazyLoad();
protected void onInvisible() {
}
}
网友评论