如何防止viewPager中Fragment预加载
来源:互联网 发布:壁虎网络 编辑:程序博客网 时间:2024/05/25 12:21
viewPager+Fragment使我们开发中经常使用到的一个组合,当加载FristFragment时,如果你在Frgament各个生命周期打出log,会发现你的SecondFragment其实也已经加载好了,随时准备变为可见,这是机制不能说是有问题,但是如果在这两个Fragment初始化时我们都需要访问网络接口,那么问题就来了,我们肯定是希望加载到当前Fragment时才去访问网络获取数据,而不是预先去访问;在这里记录下防止Fragment预加载的方法:
1.BaseFragment
各个Fragment继承BaseFragment
/** BaseFragment * @author:holiday*/public abstract class BaseFragment extends Fragment implements View.OnClickListener, View.OnTouchListener { private InputMethodManager mInputMethodManager; protected boolean isVisible;//当前Fragment是否可见 protected abstract void lazyLoad(); @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); //可以在baseFragment对键盘做处理 view.setOnTouchListener(this); mInputMethodManager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); } //Fragment变为可见或不见时调用@Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (getUserVisibleHint()) { isVisible = true; lazyLoad(); } else { isVisible = false; } } @Override public boolean onTouch(View v, MotionEvent event) { mInputMethodManager.hideSoftInputFromWindow(v.getApplicationWindowToken(), 0); return false; } @Override public void onClick(View v) { mInputMethodManager.hideSoftInputFromWindow(v.getApplicationWindowToken(), 0); } }
2.每个Fragment都需要继承BaseFragment
下面举例说明firstFragment
public class FristFragment extends BaseFragment{ private View mView; private boolean isPrepare;//标志位,标志是否已经初始化完成 private Context mContext; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { mView = inflater.inflate(R.layout.layout_fragment_first, null); return mView; } @Override protected void lazyLoad() { if (isPrepare && isVisible) { //TODO 类似网络请求任务、只有现实当前Fragment才可以执行的任务等 } } @Override public void onPause() { super.onPause(); isPrepare = false; } @Override public void onResume() { super.onResume(); isPrepare = true; }}
以上,如果更好方法,还请指出~
阅读全文
2 0
- 如何防止viewPager中Fragment预加载
- Fragment+Viewpager防止预加载
- ViewPager防止Fragment销毁以及取消Fragment的预加载
- ViewPager防止Fragment销毁以及取消Fragment的预加载
- ViewPager防止Fragment销毁以及取消Fragment的预加载
- ViewPager防止Fragment销毁以及取消Fragment的预加载
- ViewPager防止Fragment销毁以及取消Fragment的预加载
- viewpager+fragment 防止fragment重新加载
- viewpager+fragment防止销毁和预加载问题
- ViewPager+Fragment如何取消预加载
- 取消ViewPager中fragment的预加载
- viewpager fragment 预加载
- ViewPager +Fragment 中Fragment被预加载问题(ViewPager中Fragment的生命周期管理)
- ViewPager切换防止Fragment销毁以及取消Fragment的预加载
- ViewPager中如何获取Fragment
- viewPager+fragment阻止预加载
- ViewPager + Fragment 预加载问题
- ViewPager+Fragment 预加载问题
- gitlab的使用技巧
- JavaScript 的使用基础总结①
- matplotlib marker 设置
- Android4.0的Alertdialog对话框,设置点击其他位置不消失
- 国建融科合创_政府机构应该在BIM技术设计与施工推广中做什么
- 如何防止viewPager中Fragment预加载
- 网址整理0.2
- Mysql数据库中的字段长度是指字节还是字符
- VsCode 快捷键
- 如何进入阿里巴巴,如何学好Java(转自:知乎话题“在阿里巴巴工作是怎样一番体验”)
- xml解析
- mybatis获取map中的key和value
- 最优灌溉10分垃圾
- ECLIPSE取消自动更新