Fragment切换 replace 和 add 的比较 以及最佳方案
2017-07-06 14:18
162 查看
参考:http://blog.csdn.net/shimiso/article/details/44677007
使用add方式 不及时hide会出现重叠的bug。
使用replace方式,虽然这种方式会避免上述的bug,但也是重复创建了对象。因为replace方式,对应的FrameLayout只有一
层,而add方式,这个FrameLayout其实有多层。但是这种方式的缺点是:每次replace会把生命周期全部执行一遍,如果在这些生命周期函数 里拉取数据的话,就会不断重复的加载刷新数据。
解决:
(mContent是提取的私有全局变量,当前页面是哪一个fragment就赋值给它)
当你的fragment有查询数据库,联网等操作的时候,由于事务的提交(commit)是异步进行的,切换fragment会出现一些意料之外的bug。采用这种方式比较稳妥。
使用add方式 不及时hide会出现重叠的bug。
使用replace方式,虽然这种方式会避免上述的bug,但也是重复创建了对象。因为replace方式,对应的FrameLayout只有一
层,而add方式,这个FrameLayout其实有多层。但是这种方式的缺点是:每次replace会把生命周期全部执行一遍,如果在这些生命周期函数 里拉取数据的话,就会不断重复的加载刷新数据。
解决:
private void switchFragment(Fragment fragment) { if (mContent != fragment) { if (!fragment.isAdded()) {//判断fragment是否已经添加过 //先把当前的fragment隐藏,把用到的fragment添加上去 getSupportFragmentManager().beginTransaction().replace(R.id.home_container, fragment).commit(); // getSupportFragmentManager().beginTransaction().hide(mContent).add(R.id.home_container, fragment).commit(); } else { //先把当前的fragment隐藏,把已经添加过的并需要用到的fragment显示出 getSupportFragmentManager().beginTransaction().hide(mContent).show(fragment).commit(); } mContent = fragment; } }
(mContent是提取的私有全局变量,当前页面是哪一个fragment就赋值给它)
当你的fragment有查询数据库,联网等操作的时候,由于事务的提交(commit)是异步进行的,切换fragment会出现一些意料之外的bug。采用这种方式比较稳妥。
相关文章推荐
- android之fragment的两种使用方式(add和replace方式切换)
- Android Fragment add/replace以及backstack
- android之fragment的两种使用方式(add和replace方式切换)
- android之fragment的两种使用方式(add和replace方式切换)
- 底部导航fragment切换方式由replace更改为add
- android之fragment的两种使用方式(add和replace方式切换)
- android之fragment的两种使用方式(add和replace方式切换)
- FragmentTransaction的add(),hide(),show()方法与Replace()方法的比较
- Android使用Fragment来实现TabHost的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信
- Android使用Fragment来实现TabHost的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信
- Android使用Fragment来实现TabHost的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信
- 【转】Android使用Fragment来实现ViewPager的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信
- [Android]Fragment加载替换add,show,hide,replace方法
- Android使用Fragment来实现TabHost的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信
- Android 音乐播放器的开发教程(四)Activity和Fragment的通信以及Fragment的切换 ----- 小达
- Android使用Fragment来实现TabHost的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信
- Android 利用ViewPager实现底部圆点导航左右滑动效果以及Fragment页面切换
- Android 屏幕旋转(方向和configChanges) 处理 AsyncTask 和 ProgressDialog 的最佳方案(DialogFragment 使用 续)
- Android使用Fragment来实现ViewPager的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信
- Android使用Fragment来实现TabHost的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信