1.写一个懒加载的基类
public abstract class BaseFragment extends Fragment {
//Fragment的View加载完毕的标记
private boolean isViewCreated;
//Fragment对用户可见的标记
private boolean isUIVisible;
public T home;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view=View.inflate(getActivity(),layoutResID(),null);
home = initPresenter();
initView(view);
initDate();
return view;
}
protected abstract int layoutResID();
protected abstract T initPresenter();
protected abstract void initView(View view);
protected abstract void initDate();
@Override
public void onViewCreated(@NonNull 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() {
//这里进行双重标记判断,是因为setUserVisibleHint会多次回调,并且会在onCreateView执行前回调,必须确保onCreateView加载完毕且页面可见,才加载数据
if (isViewCreated && isUIVisible) {
loadData();
//数据加载完毕,恢复标记,防止重复加载
isViewCreated = false;
isUIVisible = false;
Log.i("xx","走了");
}
}
@Override
public void onDestroy() {
super.onDestroy();
isViewCreated = false;
isUIVisible = false;
Log.i("xx","销毁");
}
protected abstract void loadData();
}
2.在我们需要懒加载的页面继承写好的基类 会重写基类中的四个方法 详情参考代码
public class Fragment1 extends BaseFragment implements Contract.View_Interface {
@Override
//此方法用来绑定布局
protected int layoutResID() {
return R.layout.fragment1;
}
@Override
//此方法用来查找控件
protected void initView(View view) {
rv_show = view.findViewById( R.id.rv_show );
smart = view.findViewById( R.id.smart );
}
@Override
/此方法用来初始化数据
protected void initDate() {/
//创建P层
presenter = new Presenter();
presenter.attahView( this );//绑定
smart.setEnableLoadMore( true );//设置可以上拉
}
@Override
//此方法用来做网络请求
protected void loadData() {
presenter.requestData( page );
}
}