我有几个片段不断相互替换(将事务添加到后台堆栈)。根据用户在某些时候的操作,我需要清除所有(或部分)以前的片段并只显示 1 个新片段。
为此,我目前popBackStack()
先执行 a 清除它们,然后执行 a replace()
,这按预期工作。然而,有时在我们看到新片段之前,前一个片段会闪现。我认为这是因为我在显示新片段之前先弹出回栈。
所以我只是想知道是否有一种简单的方法可以先显示新片段,然后清除以前事务的后台堆栈?
我有几个片段不断相互替换(将事务添加到后台堆栈)。根据用户在某些时候的操作,我需要清除所有(或部分)以前的片段并只显示 1 个新片段。
为此,我目前popBackStack()
先执行 a 清除它们,然后执行 a replace()
,这按预期工作。然而,有时在我们看到新片段之前,前一个片段会闪现。我认为这是因为我在显示新片段之前先弹出回栈。
所以我只是想知道是否有一种简单的方法可以先显示新片段,然后清除以前事务的后台堆栈?
编辑:你是对的,这是因为你在添加片段之前从后台堆栈中删除。
如果您不需要后堆栈上的新片段,您可以先在单个事务中添加新片段,然后在事务后从后堆栈弹出其余片段。(或者如果你确实需要它,从后面的堆栈中删除所有片段,除了新添加的片段)
此外,如果您只是调用 replace(R.id.containter, new Fragment(), TAG) 所有添加到容器中的片段都将被新片段替换。(然后您也可以手动清除后台堆栈)
这两种解决方案都应该删除您有时看到的闪存,因为在您的情况下,您在添加新的之前开始删除片段,因此您可以看到旧的片段自行删除。
如果问题仍然存在,您可以尝试在将新片段附加到活动并显示自身后清除您的后台堆栈(但我认为没有必要,我尝试了上述解决方案,我首先调用添加片段并弹出之后的整个backstack)