fragment重影问题

来源:互联网 发布:sql语句关键字 编辑:程序博客网 时间:2024/04/29 09:24

最近使用fragment是发现一个之前没有遇到的问题,fragment有时会出现重影,使用hide()、show()、replace无效。网上给出了很多建议,有的说使用使用hide()和show()代替replace()方法,最终在知乎上找到答案。

当系统内存不足时,一些后台Activity会被销毁掉,在Fragment的宿主activity被销毁后,Fragment的状态被保存。当Activity恢复到前台重建时,之前实例过的Fragment又出现在Acticity中,而FragmentTransaction相当于又重新add  fragment。所以此时FragmentTransaction的hide()、show()方法对其无效。

我们可以打开手机:设置-开发人员选项-不保留活动  选择打开,这样当Activity置于后台后会被销毁,重现内存不足时重影现象。

解决方法:

1. 为每个fragmentrootview添加背景。

2. add fragment时为fragment加一个Tagoncreate()有一个参数bundle savedInstanceState,在onCreate()中判断savedInstanceState是否为空,不为空就调用findFragmentTagById()或findFragmentByTag()fragment赋值.

3. 重写onSaveInstanceState(); 注释掉super.onSaveInstanceState(outState);在activity被销毁后,不保存fragment状态。

     @Override
protected void onSaveInstanceState(Bundle outState) {

// super.onSaveInstanceState(outState);
}


1 0
原创粉丝点击