我们知道在activity中viewpager+fragment中切换碎片,运用懒加载好处是当切换到相应的fragment时候再请求网络数据,更新界面,避免了用户流量的消耗,所以在安卓开发过程中,要从用户的角度去开发,避免造成不必要的流量支出。
/**
* 写一个基类
*/
public abstract class LazyFragment extends Fragment {
protected boolean isVisible;
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (getUserVisibleHint()) {
isVisible = true;
onVisible();
} else {
isVisible = false;
onInvisible();
}
}
protected void onVisible() {
lazyLoad();
}
protected abstract void lazyLoad();
protected void onInvisible() {
}
}
/**
* 在fragment中继承
*/
public class OneFragment extends LazyFragment {
@Bind(R.id.onefragment)
TextView onefragment;
// 标志位,标志已经初始化完成。
private boolean isPrepared;
public OneFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
Log.e("OneFragment-->", "onCreateView");
View view = inflater.inflate(R.layout.fragment_one2, container, false);
ButterKnife.bind(this, view);
isPrepared = true;
lazyLoad();
return view;
}
@Override
protected void lazyLoad() {
if (!isPrepared || !isVisible) {
return;
}
//这里做网络请求获取数据然后更新界面的操作
requestData();
}
private void requestData() {
Log.e("OneFragment-->", "isVisible:" + isVisible);
Log.e("OneFragment-->", "isPrepared:" + isPrepared);
}
@Override
public void onDestroyView() {
super.onDestroyView();
ButterKnife.unbind(this);
}
}