碎片相互重叠

Iga*_*gal 19 android fragment android-fragments android-actionbar

我有一个带有3个标签的操作栏,每个标签打开一个片段.第三个选项卡"目录"有一个列表: 在此输入图像描述

当我点击某个项目时,它会打开另一个片段,该片段不属于操作栏:

public void onClick(View v) {
    switch (v.getId())
    {
    case R.id.category1:    
        Fragment cosmeticsFragment = new ActivityCosmetics();
        FragmentTransaction transaction = getFragmentManager().beginTransaction();

        transaction.replace(android.R.id.content, cosmeticsFragment);
        transaction.addToBackStack(null);

        transaction.setTransition(1);

        transaction.commit();
        break;
        ...
Run Code Online (Sandbox Code Playgroud)

这就是它之后的样子: 在此输入图像描述

从这一点来说,如果我转到其他选项卡然后返回目录选项卡,我会看到之前的2个片段相互重叠:

在此输入图像描述

我该如何防止它发生?

Avi*_*a00 5

您可以通过按标签搜索片段来管理片段。将片段添加到 backstack 时添加 TAG 名称

transaction.addToBackStack("myCustomFragmentTag");
Run Code Online (Sandbox Code Playgroud)

如果您想销毁应用程序中任何位置的片段:

Fragment previousInstance = getFragmentManager().findFragmentByTag("myCustomFragmentTag");
                if (previousInstance != null)
                    transaction.remove(previousInstance);
Run Code Online (Sandbox Code Playgroud)

您可以尝试覆盖某些行为,因此这行代码将破坏初始化的最后一个片段

getFragmentManager().popBackStack(); 
Run Code Online (Sandbox Code Playgroud)


小智 5

为片段布局设置背景可以解决这个问题。

  • 为片段添加背景不是正确的解决方案。它只是一个黑客 (4认同)