public abstract class BaseFragment extends Fragment {
/**
* 标志位:fragment是否可见
*/
protected boolean isVisible;
/**
* 标志位:是否已加载fragment视图
*/
private boolean isPrepared = false;
/**
* 标志位:是否已进行懒加载数据,保证数据只加载一次
*/
private boolean isLoadData = false;
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
TAG = this.getClass().getSimpleName();
Logger.d(TAG, "setUserVisibleHint() -> isVisibleToUser: " + isVisibleToUser);
if(getUserVisibleHint()) {
isVisible = true;
onVisible();
} else {
isVisible = false;
onInvisible();
}
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(getLayoutId(), container, false);
return view;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
Logger.d(TAG, "onViewCreated");
initView(view, savedInstanceState);
isPrepared = true;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Logger.d(TAG, "onActivityCreated");
initData();
//viewpager加载的第一个视图时,第一个视图提前执行setUserVisibleHint方法导致懒加载无效的问题
onVisible();
}
/**
* fragment可见时执行
*/
protected void onVisible(){
if (!isPrepared || !isVisible || isLoadData) {
return;
}
isLoadData = true;
onLazyLoad();
}
/**
* 懒加载核心方法
*/
protected void onLazyLoad(){
Logger.d(TAG,"onLazyLoad");
}
/**
* fragment不可见时执行
*/
protected void onInvisible(){}
protected abstract int getLayoutId();
protected abstract void initView(View view, Bundle savedInstanceState);
protected abstract void initData();
}
Fragment懒加载方法
最新推荐文章于 2024-05-02 12:35:12 发布