Fragment懒加载
Fragment
最常见的使用方式就是ViewPager
嵌套Fragment
和直接通过FragmentManager
来管理Fragment
。 如果每个Fragment
都有默认的网络请求操作 那么多个在Fragment
创建过程中都会执行默认网络请求,无论Fragment
是否对用户可见,显然有些浪费流量、影响性App
性能。让我们来优化一下!
话不多说,直接上代码 BaseFragment
public abstract class BaseFragment extends Fragment {
/***
* 是否初始化过布局
*/
private boolean isViewInitiated;
/***
* 当前界面是否可见
*/
private boolean isVisibleToUser;
/***
* 是否加载过数据
*/
private boolean isDataInitiated;
/***
* 根布局
*/
protected View mView;
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
isViewInitiated = true;
prepareData();
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
mView = inflater.inflate(getLayoutId(), container, false);
initView();
initData();
doEvent();
return mView;
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
this.isVisibleToUser = isVisibleToUser;
if (isVisibleToUser) {
prepareData();
isDataInitiated = true;
}
}
/***
* 判断懒加载的条件
*/
private void prepareData() {
if (isVisibleToUser && isViewInitiated && !isDataInitiated) {
loadData();
}
}
/***
*
* @return Fragment要加载的布局
*/
protected abstract int getLayoutId();
/***
* 初始化控件
*/
protected abstract void initView();
/***
* 初始化数据
*/
protected abstract void initData();
/***
* 点击事件
*/
protected abstract void doEvent();
/***
* 加载数据
*/
protected abstract void loadData();
@Override
public void onDestroy() {
super.onDestroy();
mView = null;
}
版权声明:本文为gcvition原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。