我们都知道fragment有两种添加的方式,一种是add 一种是replace 两种都可以实现我们的activity里面的布局添加fragment,但是我们发现如果你做页面切换时,同一个activiy里面的viewgroup多次addfragment那么他会根据你当前viewgroup的特性就行排列,那么我们就想到了repalce,replace顾名思义是替换fragment,他的一个运行的原理是移除添加的fragment 添加新的进去。这也就意味着你每调用一次replace他就会给你重新添加新的fragment也就意味着每次都会刷新你的fragment(fragment的生命周期都会执行),这里根据需求去取决你的使用,那么如果是用add又该如何进行操作。那么我么的事务为我们提供了一个方法叫hide可以去隐藏你添加的fragment,再使用show方法展示出我们隐藏的fragment就可以达到一个页面切换的效果。但是如果长时间在后台运行,gc回收了你的对象就可能导致你的fragment为空,这时候在展示将会出现重叠。为了解决该bug代码如下:
public void addfragment(Fragment on Fragment to,String tag){
if(!
to
.isaadded
){
public void addfragment(Fragment on Fragment to,String tag){
FragmentTransaction fragmentTransaction =
supportFragmentManager.
beginTransaction();
fragmentTransaction .hide(on);
fragmentTransaction .hide(on);
fragmentTransaction .add(R.id.frg,to,tag).show(to);
}else{
if(to!=null){
to=fragmentTransaction .findfrgmentbytag(tag);
}
fragmentTransaction.show(to);
}
fragmentTransaction.comit();
}
}else{
if(to!=null){
to=fragmentTransaction .findfrgmentbytag(tag);
}
fragmentTransaction.show(to);
}
fragmentTransaction.comit();
}