Android学习之解决多个Fragment切换时重新实例化的问题
2016-03-06 19:39
531 查看
多个Fragment切换时如果直接使用replace()方法来切换Fragment的内容,会导致要切换的Fragment重新实例化,也就是会重新调用onCreateView()方法,之前也想过用show()和hide()方法来显示和隐藏Fragment,当然用下来就会发现如果存在多个Fragment时还是会有一些别的问题,之后查了很多网上的答案,发现很多大神用了一个方法来切换Fragment,在这里就不添上N个大神的原文地址了,本人也不知道谁才是第一个作者,在此感谢各位大神。
以下是切换的方法:
顺便说下add()和replace()的区别:
前者是把一个Fragment添加到一个容器里,后者是先移除掉相同ID的所有Fragment,然后在add()当前的这个Fragment,一个有2层,一个有1层。
多个Fragment切换时,如果是随意可以点击来切换的,会判断不清楚需要隐藏的Fragment是哪个,大家可以使用SharedPreferences来给每次点击存储一个值,然后通过判断这个值来判断是从哪个地方点击的,例如这样:
if (pos ==1) {
switchFragment(B, A);
} else if (pos ==2)
{
switchFragment(C, A);
}
以下是切换的方法:
/** * 切换Fragment * * @param fromFragment:需要隐藏的Fragment * @param toFragment:需要显示的Fragment */ private void switchFragment(Fragment fromFragment, Fragment toFragment) { if (fromFragment != toFragment) { FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); if (!toFragment.isAdded()) { fragmentTransaction.hide(fromFragment).add(R.id.framelayout_content_activity_home, toFragment).commit(); } else { fragmentTransaction.hide(fromFragment).show(toFragment).commit(); } } }
顺便说下add()和replace()的区别:
前者是把一个Fragment添加到一个容器里,后者是先移除掉相同ID的所有Fragment,然后在add()当前的这个Fragment,一个有2层,一个有1层。
多个Fragment切换时,如果是随意可以点击来切换的,会判断不清楚需要隐藏的Fragment是哪个,大家可以使用SharedPreferences来给每次点击存储一个值,然后通过判断这个值来判断是从哪个地方点击的,例如这样:
if (pos ==1) {
switchFragment(B, A);
} else if (pos ==2)
{
switchFragment(C, A);
}
相关文章推荐
- Android四大组件之Service
- 关于Android MultiDex的问题
- Android 热修复Nuwa的原理及Gradle插件源码解析
- 浅谈Android开发中内存泄露与优化
- Android View 的弹性滑动: Scroller使用说明
- 盘点Android应用开发中曾经很流行但是已经过时或即将过时的技术
- Android 通过JNI实现守护进程,使Service服务不被杀死
- 2016-3-5
- android多屏幕适应性
- Android开发之Animation介绍(下) ——Property Animation
- Android Service完全解析,关于服务你所需知道的一切(下)
- Android InputStream等通用转化总结 初阶篇
- Android Studio NDK环境搭建
- android service 后台执行定时任务
- 基于Android的Word在线预览
- android简单实例---------ActionBar的简单使用(三,补充)
- Android的错误
- 从Android运行时出发,打造我们的脱壳神器
- Android中的context的学习理解
- Android中Intent的各种常见作用