Android 第二次替换时碎片重叠,无addtobackstack

Android 第二次替换时碎片重叠,无addtobackstack,android,android-fragments,Android,Android Fragments,情景: 活动将片段A添加到Framelayout 片段A替换为片段B 在第二步之前,一切都很完美 片段B替换为片段B(也尝试替换为片段A) 在步骤3中使用addToBackStack()时,一切都能正常工作。输出将是A>B>B(重新创建)>B(onBackPressed()/popBackStack())>A 但当我在步骤3中不使用addToBackStack()时,输出将是A>B>B(重新创建)>A(与B重叠) 发生重叠的原因是什么 活动添加片段A: FragmentManager fragm

情景:

  • 活动将片段A添加到Framelayout

  • 片段A替换为片段B

  • 在第二步之前,一切都很完美

  • 片段B替换为片段B(也尝试替换为片段A)
  • 在步骤3中使用addToBackStack()时,一切都能正常工作。输出将是A>B>B(重新创建)>B(onBackPressed()/popBackStack())>A

    但当我在步骤3中不使用addToBackStack()时,输出将是A>B>B(重新创建)>A(与B重叠)

    发生重叠的原因是什么

    活动添加片段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();
    
    getFragmentManager().beginTransaction().replace(R.id.container, new ChildChartFragment()).commit();
    
    重新创建片段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();
    
    getFragmentManager().beginTransaction().replace(R.id.container, new ChildChartFragment()).commit();
    

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

    效果不错。只是想知道为什么在不使用背景色隐藏片段B的情况下发生重叠。这意味着片段B在替换为片段A时没有移除?ohk。我很高兴它成功了。是的,它确实在背景中,它没有被删除,所以我们需要为每个片段设置背景,否则您可能会面临这个问题。