Fragment懒加载
package com.sn.retrofitm.view.frag;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.sn.retrofitm.presenter.BasePresenter;
import com.sn.retrofitm.view.IBaseView;
/**
* base Fragment 实现懒加载;
* fragment初始化时,如果不可见就是用户没有滑动看这个界面,那么就不请求数据
* 当Fragment可见时,才去请求数据,如何知道fragment是否可见,设置标识
*/
public abstract class BaseFragment<P extends BasePresenter> extends Fragment implements IBaseView {
public P presenter;
//布局文件转换来的View对象
protected View rootView;
private boolean isInitView = false;//标记是否初始化view
private boolean isInitData = false;//标识是否请求过数据
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
int layoutId = getLayoutId();
rootView=inflater.inflate(layoutId,container,false);
// Inflate the layout for this fragment
return rootView;
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
initView();
//更改标识
isInitView = true ;
//进行P层绑定
presenter =initPresenter();
if (presenter !=null){
presenter.attachView(this);
}
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
//进行懒加载
boolean userVisibleHint = getUserVisibleHint();
if (userVisibleHint && isInitView && isInitData){
initData();
//更改初始化数据标识
isInitData = true ;
}
}
/**
* 每一次ViewPager切换视图的时候,这个方法都会自动调用
* @return
*/
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
//可见,并且已经初始化View,并且没有请求过数据
if(isVisibleToUser &&isInitView && isInitData){
initData();;
//更改初始化数据标识
isInitData = true ;
}
}
//获取布局id
public abstract int getLayoutId();
//初始化控件
public abstract void initView();
//请求数据
public abstract void initData();
//初始化Presenter
public abstract P initPresenter();
@Override
public void onDestroy() {
super.onDestroy();
if (presenter !=null){
presenter.detachView();
}
}
}