Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 机器人碎片相互重叠_Android_Android Fragments - Fatal编程技术网

Android 机器人碎片相互重叠

Android 机器人碎片相互重叠,android,android-fragments,Android,Android Fragments,我已经处理碎片有一段时间了,但我经常遇到一个让我恼火的问题。碎片有时会相互缠绕在一起。现在,我成功地为此分离出一个用例,如下所示: 片段A(也与名称一起使用“backstack\u state”) 片段A与片段B(使用addToBackStack) 将片段B替换为片段C,而不使用addToBackStack 在给定点使用popBackStack(“backstack\u state”,0),问题来了: 反叠被弹出,直到片段A但是片段C被片段A覆盖,两者同时可见。这是正常的行为还是我犯了错误 这里

我已经处理碎片有一段时间了,但我经常遇到一个让我恼火的问题。碎片有时会相互缠绕在一起。现在,我成功地为此分离出一个用例,如下所示:

片段A
(也与名称
一起使用“backstack\u state”

片段A
片段B
(使用
addToBackStack

片段B
替换为
片段C
,而不使用
addToBackStack

在给定点使用
popBackStack(“backstack\u state”,0)
,问题来了:

反叠被弹出,直到
片段A
但是
片段C
片段A
覆盖,两者同时可见。这是正常的行为还是我犯了错误

这里还有一句话:所有的碎片都有透明的背景


谢谢

发生这种情况是因为顶部片段(在本例中为片段C)未被移除。您必须首先在片段事务中删除它。试试这个:

FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Fragment topFragment = fragmentManager.findFragmentById(R.id.fragment_container);
if (topFragment != null) {
    fragmentTransaction.remove(topFragment);
}    
fragmentTransaction.commit();
fragmentManager.popBackStack("backstack_state", 0);

至少可以说,
片段
后堆栈的工作很混乱。此外,后堆栈上的
片段
和其他东西仍然会消耗内存,这使得将
片段
添加到后堆栈中从性能角度看不是很好。我的建议是:不要将
片段
添加到后台堆栈中(在大多数情况下,这是糟糕的设计)。使用
活动
构建导航树。