您的位置:首页 > 其它

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会把生命周期全部执行一遍,如果在这些生命周期函数 里拉取数据的话,就会不断重复的加载刷新数据。

解决:

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。采用这种方式比较稳妥。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐