深入研究片段替换交易和系统返回密钥.最后一个碎片没有被破坏,仍然充满活力


  1. FragmentTransaction.add() id.content上的fraga
  2. FragmentTransaction.replace()addToBackStack fragb id.content
  3. FragmentTransaction.replace() fragc id.content

问题发生为:

  1. 单击System back->我们将看到Fraga正在重新创建,但 Fragc仍然活着

这是由于我们单击System back按钮时,我们在上面的第二个操作的交易中恢复了交易。我们将 destroy fragb而不是destroy fragc。Fragc还活着,这就是我不想要的。

其中一种解决方案是在活动中实现backStackListener,而当backStack为0时,我然后通过代码删除Fragc。

另一个是在任何replace()事务之前,我们致电popBackStack()以删除先前的事务。我们在随后的每项交易中应用addBackStack()。但是,缺点是每次我们致电popBackStack()时,它都会调用以前片段的onResume(),这也不令人愉快。

有人可以就如何更好地应对这一点建议我有更好的解决方案?真的很感激!

最后,我采用的方法是删除fragc OnBackStackListener检测到后堆栈计数时,将其更改为0。

最新更新