Fragment 切换时 重叠问题

来源:互联网 发布:淘宝我的爱车档案 编辑:程序博客网 时间:2024/05/16 07:55
Fragment我是用hide和add,没有用replace.

replace没有重叠的问题,但是相当耗费资源
用hide和add都是秒开。但是有一个问题,应用返回到桌面,长时间不操作!再次打开的时候发现首页和购物车的Fragment重叠了

而其他的不会重叠,我一直以为在点击购物车的时候,哪句代码出错了。检查半天,无果!没毛病。而且这个bug是偶现的,谁知道什么时候出现呢
最后百度谷歌。查出结果!按这个步骤,可以让这个bug复现

  • 设置-开发者选项-不保留活动 把这个打开

就会出现以下结果


这里写图片描述

这是因为再次回到这个app的时候,通过onCreate中的参数savedInstanceState恢复了之前的fragment。此时的FragmentTransaction中的相当于又再次add了fragment进去的,之前保存的fragment也还在

真的是这样吗,其它的都是没有问题的。为什么只有购物车会重叠

确实是这样。之所以点击分类看不到,是因为布局铺满整个屏幕,且不是透明的,其实分类下面也有首页,我们看不到而已。

其实如果你的fragment也是hide和add!并且没有做处理 !也是有这个问题,只不过你的布局不是透明的(就跟我的分类一样)。你没有发现而已

有一种方法:简单粗暴。重写onSaveInstanceState,不让activity保存状态

     @Overrideprotected void onSaveInstanceState(Bundle outState) {//        super.onSaveInstanceState(outState);}

我试过,此方法确实可以解决重叠这个问题,但不妥,每次打开的时候都会像第一次打开app一样,这样太消耗资源


还有一种方法:可以在onCreate处判断savedInstanceState是否为空,做相应处理(我没用这个方法)
这里写图片描述
我使用的方法:简单粗暴到极致


既然分类下面也有一个HomeFragment,但是我们看不到,因为布局铺满屏幕且不是透明的,那我根据这个思路,把购物车也设置个背景色,不要透明就行。在布局上一行代码就轻松搞定,以下是购物车的根布局增加了 android:background=”@color/white”
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@color/white"android:orientation="vertical">
原创粉丝点击