完美实现ViewPager+Fragment懒加载
2018-10-31 本文已影响0人
mt大山
1、首先创建一个BaseFragment基类,在基类里实现懒加载,以便其他子类调用。
public class BaseFragment extends Fragment{
private View view;
// 判断view是否为空标志,防止创建view是报空指针异常。(因为Fragment的setUserVisibleHint方法在onCreateView之前调用,如果在此方法中加载控件会报空指针异常)
private boolean isViewCreate;
//判断当前Fragment是否显示标志
private boolean isFragmentVisiable;
//加载布局
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
view = inflater.inflate(R.layout.fgt_base, container, false);
return view;
}
//初始化标志(在onCreate里调用)
private void initFlag(){
isViewCreate = false;
isFragmentVisiable = false;
}
@Override
public void onCreate( Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initFlag();
}
//调用setUserVisibleHint
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
//判断view是否为空 如果为空返回,不为空 代表 view已经创建
if (view == null) {
return;
}
isViewCreate = true;
if (isFragmentVisiable) {
onFragmentVisiableChange(true);
isFragmentVisiable = true;
return;
}
if (isFragmentVisiable) {
onFragmentVisiableChange(false);
isFragmentVisiable = false;
}
}
@Override
public void onViewCreated( View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
if (!hasCreateView && getUserVisibleHint()) {
onFragmentVisiableChange(true);
isVisiableFlag = true;
}
}
/*
*
* 如果Fragment第一次加载,等待OnCreateView后才会进入该回调方法,其他情
* 况和setUserVisiableHint(boolean一致)
* isVisiable true 不可见->可见
* false 可见 ->不可见
*
* */
protected void onFragmentVisiableChange(boolean isVisiable) {
}
}
到此BaseFragment已经封装完毕
2、在Fragment里使用
新建Fragment类继承BaseFragment 调用onFragmentVisiableChange()方法即可。