Android 多个Fragment切换时,避免重复创建Fragment。
来源:互联网 发布:低成本网络推广 编辑:程序博客网 时间:2024/06/06 02:18
加载的Fragment的方法有:、
1、replace():替换,当前Fragment不再使用时使用。
2、add():添加,如果有Fragment会覆盖它。
Fragment的应用场景大部分是想qq、微信那样。那么MainActivity里加载Fragment应该是复用的,如果用replace()加载,每次都会创建新的Fragment,显然不是我们想要的结果。方案:用add()、hide()和show()三个方法结合完成,主要代码如下。
步骤一:封装显示Fragment的方法
public void showFragment(int index) { FragmentTransaction ft = fragmentManager.beginTransaction(); hideFragment(ft); //注意这里设置位置 position = index; switch (index) { case FRAGMENT_ONE: /** * 如果Fragment为空,就新建一个实例 * 如果不为空,就将它从栈中显示出来 */ if (needFragment == null) { needFragment = new NeedFragment(); ft.add(R.id.fl_fragment, needFragment); } else { ft.show(needFragment); } break; case FRAGMENT_TWO: if (serviceFragment == null) { serviceFragment = new ServiceFragment(); ft.add(R.id.fl_fragment, serviceFragment); } else { ft.show(serviceFragment); } break; } ft.commitAllowingStateLoss(); }加载之前先hide。
public void hideFragment(FragmentTransaction ft) { //如果不为空,就先隐藏起来 if (needFragment != null) { ft.hide(needFragment); } if (serviceFragment != null) { ft.hide(serviceFragment); } }步骤二:直接调用showFragment()
fragmentManager = getSupportFragmentManager(); showFragment(FRAGMENT_ONE);当屏幕旋转时,Fragment会重叠,因为屏幕旋转时activity走了onCreate方法,调用了showFragement方法,在原先的基础上重新调用了add()方法。
旋转时activity的生命周期onSaveInstanceState->onStop->onDestroy->onCreate->onStart->onRestoreInstanceState->onResume,重新获得焦点,进行交互。
解决思路 1:旋转时保存当前fragment的信息,旋转后重新加载该fragment。2:设置fragment为static,因为在每次显示的时候都会隐藏一次fragment,如果不设置static属性,旋转时fragment因为activity的destroy,fragment也会销毁。fragment为null时,不能隐藏,但是这样可能会出现内存泄露的情况,所以我们不用这种方法。使用第一种靠谱。
主要代码实现(第一种方法的代码)
/** * 解决屏幕旋转时:重复添加fragment。 * @param outState */ @Override protected void onSaveInstanceState(Bundle outState) { //屏幕旋转时记录位置 outState.putInt(POSITION, position); Log.e("tag","onSaveInstanceState"); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { Log.e("tag","onRestoreInstanceState"); //屏幕恢复时取出位置 showFragment(savedInstanceState.getInt(POSITION)); super.onRestoreInstanceState(savedInstanceState); }
阅读全文
1 0
- Android 多个Fragment切换时,避免重复创建Fragment。
- 切换Fragment时避免重复加载UI
- 避免同一activity下 多个fragment 切换时重复执行onCreateView方法
- 避免同一activity下 多个fragment 切换时重复执行onCreateView方法
- 避免同一activity下 多个fragment 切换时重复执行onCreateView方法
- 避免同一activity下 多个fragment 切换时重复执行onCreateView方法
- 切换Fragment避免重复加载
- FragmentTabHost切换Fragment时避免重复加载UI
- FragmentTabHost切换Fragment时避免重复加载UI
- FragmentTabHost切换Fragment时避免重复加载UI
- FragmentTabHost切换Fragment时避免重复加载UI
- FragmentTabHost切换Fragment时避免重复加载view
- FragmentTabHost切换Fragment时避免重复加载UI
- FragmentTabHost切换Fragment时避免重复加载UI
- FragmentTabHost切换Fragment时避免重复加载UI
- FragmentTab切换Fragment时避免重复加载UI
- FragmentTabHost切换Fragment时避免重复加载UI
- FragmentTabHost切换Fragment时避免重复加载UI
- 1px在高清屏幕上的问题
- 创建父子maven工程
- git基本语法
- 程序性动画 1 ——程序性动画介绍
- 图片预览效果
- Android 多个Fragment切换时,避免重复创建Fragment。
- Cocos2dx-3.x减小空包体方法
- Linux终端内容太多无法全部显示
- 一致性哈希算法(consistent hashing)
- 继承、派生、组合
- OpenCV学习记录(一):使用haar分类器进行人脸识别
- git 配置多个SSH-Key
- 一个与实验楼类似的平台
- BP神经网络