美文网首页
Android使用Fragment重叠问题解决

Android使用Fragment重叠问题解决

作者: 易水寒1992 | 来源:发表于2016-09-18 23:26 被阅读1490次

    1.问题描述

     手机内存不足的时候,界面如果使用FragmentTransaction的hide、add方法添加fragment,出现界面重叠的现象(复现问题可以:打开“开发者选项”中的“不保留活动”-->进入应用-->按home键-->再次点击图标进入)

    2.分析

    1. 在onActivityCreated(我的是Fragment嵌套Fragment;如果你的是Activity中嵌套Fragment,则是onCreate方法)中,通过打印发现Bundle类型的参数值不为null,这是因为Activity再被回收的时候系统会保存一些值;
    2. 其实真正产生重叠的原因在于系统Activity恢复的时候会把之前加载Fragment也重新加载到activity中去(这个Fragment没有相关引用,我们处理不了),但是我们调用FragmentTransaction的add方法的时候,又重新add了一个Fragment,也就是会出现同一个类型的Fragment会加载两遍的问题;
    3. 当你复现问题的时候,你会发现重新进入的界面和上一次进入的不是同一个;

    3.分析

    1. 为每个Fragment的布局设置不透明的背景,这样呈现给用户的就只有一个界面;但是这样会有个问题,就是分析中的第三点,恢复的界面和上一次的界面不统一的问题;
    2. 保存activity被回收时,fragment的position位置:
    private int position = 0;
    @Override
    public void onSaveInstanceState(Bundle outState) {
          outState.putInt("position", position);
    }```
    在onActivityCreated或者onCreate方法中通过Bundle的getInt方法得到上次的position;
    3. 分析第二点提到了,主要是activity恢复的时候,系统将之前的fragment恢复了,那么如果我们可以得到之前fragment的引用,后面判断fragment是否为空的时候就不需要重新new一个Fragment了,这里主要是通过FragmentManager的findFragmentByTag得到之前的fragment:
    ```  java
    Fragment = mFragmentManager.findFragmentByTag("TAG");
    

    相关文章

      网友评论

          本文标题:Android使用Fragment重叠问题解决

          本文链接:https://www.haomeiwen.com/subject/ejvgettx.html