【问题标题】:Fragment overlapped when replaced second time without addtobackstack片段在第二次替换时重叠,没有 addtobackstack
【发布时间】:2019-05-15 09:48:38
【问题描述】:

场景:

  1. Activity 将 Fragment A 添加到 Framelayout。

  2. 片段 A 替换为片段 B。

在第 2 步之前,一切正常。

  1. 片段 B 替换为片段 B(也尝试替换为片段 A)。

在第 3 步中使用 addToBackStack() 时,一切正常。输出将是 A>B>B(recreated)>B(onBackPressed()/popBackStack())>A.

但是当我在第 3 步中没有使用 addToBackStack() 时,输出将是 A>B>B(recreated)>A(与 B 重叠)。

发生重叠的任何原因?

Activity添加Fragment A:

FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

    ChartFragment fragment = new ChartFragment();
    fragmentTransaction.add(R.id.container, fragment);
    fragmentTransaction.commit();    

片段 A 替换为片段 B:

FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();

                        ChildChartFragment fragment = new ChildChartFragment();
                        fragmentTransaction.replace(R.id.container, fragment);
                        fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
                        fragment.setArguments(b);
                        fragmentTransaction.addToBackStack(null);
                        fragmentTransaction.commit();

重新创建片段 B:

getFragmentManager().beginTransaction().replace(R.id.container, new ChildChartFragment()).commit();

【问题讨论】:

    标签: android android-fragments


    【解决方案1】:

    尝试在片段中设置背景颜色。

    【讨论】:

    • 成功了。只是想知道为什么在不使用背景颜色隐藏 Fragment B 的情况下会发生重叠。这意味着 Fragment B 在替换为 Fragment A 时没有删除?
    • 哦。我很高兴它奏效了。是的,它确实在后台,它没有被删除,所以我们需要为每个片段设置一个背景,否则你可能会遇到这个问题。
    猜你喜欢
    • 2016-02-18
    • 1970-01-01
    • 1970-01-01
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    相关资源
    最近更新 更多