我们在使用Frament的时候,会首先首先获取FragmentTransaction对象:

FragmentTransaction transaction = getFragmentManager().beginTransaction();

当然,我们也知道Fragment切换有两种方式:

1. replace方式

transaction.replace(R.id.frament, IndexFragment);

2. add-hide-show方式

transaction.add(R.id.frament, IndexFragment);  transaction.hide(otherfragment);  transaction.show(thisfragment);
 两种方式的区别是:   

1)replace方法,在某Layout中已经有Fragment  A存在,现在需要把Fragment  B替换(显示出来)。


使用replace(R.id.layout,B)即可以。但是这带来一个问题,原来A会在被replace后被销毁,会调用其生命周期函数(onDestoryView(),onPause(),onDestory())。


如果频繁地replace Fragment会不断创建新实例,销毁旧的,无法重用。


多次切换,会导致Fragment上的View无法加载的问题(onCreateView方法不再调用,原因是replace后没有再次新建Fragment实例)。


总结:如果旧Fragment无须再次使用,可以使用replace方法将其销毁。


如图所示,日志显示Fragment A 被创建

下面将A replace替换成BA被销毁而B被创建


再次从B replace替换成A


可以看见,B也是被销毁而Fragment A再次被创建

2)add.hide和show

简单来说,这种方式就是要填补方法(1)中的不足:不断重用Fragment的情况。

如图所示,Fragment A新建


切换到Fragment B

再次切换到A,没有调用生命周期函数


再次切换到B,没有调用生命周期函数



总结:如果Fragment需要重用或者不断切换,可以使用该方法。


总之,在切换Frament的时候,考虑切换后的Farment是否需要被再次使用来选择合适的方式,否则会带来很大的麻烦。

更多相关文章

  1. 【Android笔记】Android统计文件夹大小,删除文件夹下的所有文件方
  2. Activity缺少无参默认构造方法,产生实例化错误InstantiationExcep
  3. Android开发常见异常和解决方案(二)
  4. 关于android WebViewClient的方法解释
  5. Android(安卓)滚动事件 OnScrollListener
  6. Android(安卓)HorizontalScrollView嵌套CustomView
  7. Android(安卓)自定义View onDraw方法详解
  8. Android(安卓)混淆 Unknown verification type
  9. registerActivityLifecycleCallbacks 的用途

随机推荐

  1. Android(安卓)NDK 是什么
  2. 【Mood-11】值得学习的国内外Android开发
  3. Android开发之fedora13下编译Android源码
  4. Android mac 真机调试
  5. Android菜鸟日记29-杂记
  6. Android 设备监听网络状态变化
  7. Android使用动画的注意事项
  8. Android Drawable 那些不为人知的高效用
  9. 浅谈android系统java调用C++函数传参过程
  10. LoaderManager - Android(安卓)3.0新特性