Android 深入研究片段替换事务和系统返回键。最后一个碎片没有被摧毁,仍然完全活着 FragmentTransaction.add()FragA onid.content FragmentTransaction.replace(),addToBackStackFragBid.content FragmentTransaction.replace()FragCid.content
出现的问题如下:Android 深入研究片段替换事务和系统返回键。最后一个碎片没有被摧毁,仍然完全活着 FragmentTransaction.add()FragA onid.content FragmentTransaction.replace(),addToBackStackFragBid.content FragmentTransaction.replace()FragCid.content,android,android-fragments,fragment,Android,Android Fragments,Fragment,出现的问题如下: 单击System back->我们将看到FragA正在重新创建,但FragC仍然处于活动状态 这是因为当我们单击系统返回按钮时,我们还原了上面第二个操作的事务。我们将destroyFragB,而不是destroyFragC。FragC还活着,这是我不想要的 解决方案之一是在活动中实现一个backStackListener,当backStack为0时,我就按代码删除FragC 另一个是在任何replace()事务之前,我们调用popBackStack()来删除以前的事务。我们在每
System back
->我们将看到FragA正在重新创建,但FragC仍然处于活动状态系统返回
按钮时,我们还原了上面第二个操作的事务。我们将destroy
FragB,而不是destroy
FragC。FragC还活着,这是我不想要的
解决方案之一是在活动中实现一个backStackListener
,当backStack
为0时,我就按代码删除FragC
另一个是在任何replace()
事务之前,我们调用popBackStack()
来删除以前的事务。我们在每个后续事务中应用addBackStack()
。然而,缺点是每次调用popBackStack()
,它都会调用上一个片段的onResume()
,这也是不愉快的
有没有人能就如何更好地应对这一问题向我提供更好的解决方案?真的很感激 最后,当
onbackbackbacklistener
检测到后堆栈计数更改为0时,我采取的方法是删除FragC。为什么不将C和D添加到后堆栈中?因为我想带来的流只需一次“系统返回单击”,用户将被引导到活动中的第一个片段!