今天迫不及待的来写点文字,表达我的想法。
1:遇到的第一个事
首先:在第一次新建出来fragment的时候,如果不是主界面直接需要显示,必须要Hide掉,否则就把界面占住了,不会显示下面的界面。
fAd=new GuideFragment();
fragmentTransaction.add(android.R.id.content,fAd);//添加广告fragment
fragmentTransaction.hide(fAd);
2:第二:使用fragment都使用add 的方式添加,是现在推荐的,用hide show来显示和隐藏,replace是不需要用,就用这种方式吧、
3:第三:这是最坑爹的一个,在hide 和 show的过程中,我一直在调onResume和onPause,以为和Activity一样,在每次重新show 和hide显示的时候会走这个生命周期,
弄了很久,放弃了,去测试这个周期,才发现我错了。。。。
原因:原来在点击物理按键来进行返回退出程序,相当于是退出了依附的activity的时候才走了onPause,在重新进这个actiivty的时候才会走onResume,所以在hide和show的时候并没有这两个周期的事情,是不是恍然大悟了呢?
@Override
public void onHiddenChanged(boolean hidden) {
super.onHiddenChanged(hidden);
}
原来在hide和show的时候,至始至终只会有这个方法,和生命周期里我说的那俩家伙无关,所以只需要在这个函数里去做调整就可以了。
4:第四:在使用之后,又出现了一个问题,那就是在我开启一个新界面的时候,返回到本界面,一个本应该是hide的fragment被显示了出来,还不能操作上面的东西,我调用hide也不能隐藏它,就像一个bug似的,因为不知道怎么解决,又不是每次都出现。
解决:后面发现这个问题:其实是由Activity被回收后重启所导致的Fragment重复创建和重叠的问题。
在Activity onCreate()中添加Fragment的时候一定不要忘了检查一下savedInstanceState;
if (savedInstanceState== null ){ fragmentManager.findFragmentByTag( "标签" );} else {fragment = new Fragment(); fragmentTransaction.add(R.id. `` , fragment, "标签" );}
异常退出activity的时候会保存内部的fragment,所以有了这个问题,采用这种方式这样就能避免这个问题了,防止fragment被重建重叠。
希望我的问题,让大家知道会有点用。
513210053,欢迎大家来交流。