支持库从23.1.1升级到25.1.0后,popBackStack()行为有所不同

时间:2017-01-11 09:17:17

标签: android android-fragments android-support-library back-stack

从Android支持库23.1.1升级到最新25.1.0后,我们的应用程序中popBackStack()的行为发生了变化。

例如,我在BackStack上有三个FragmentTransactions。现在第四个FragmentTrsansaction被添加到BackStack。 FragmentTransactions是这样的:

FragmentTransaction transaction = fragmentManager.beginTransaction()
    .replace(R.id.fragment_container_single, target, CoreActivity.FRAGMENT_TAG_LEFT)
    .addToBackStack(<CONCRETE_TRANSACTION_NAME>)
    .commit();

片段#4具有逻辑,它在onViewCreated()期间自动路由到片段#5(我知道,它很难看,我必须改变它)。无论如何,当我想要离开片段#5时,我想恢复到片段#4之前显示的片段。我按事务名称执行此操作:

getFragmentManager().popBackStack(“<CONCRETE_TRANSACTION_NAME_4>”, FragmentManager.POP_BACK_STACK_INCLUSIVE);

或者这个:

getFragmentManager().popBackStack(“<CONCRETE_TRANSACTION_NAME_3>”, 0);

但是通过此调用,将调用片段#4的onCreateView()onViewCreated(),并将片段#5立即添加到BackStack。即使我恢复到片段#1 onViewCreated()被调用BackStack上的每个片段 - 片段#2,片段#3和片段#4,即使它们对FragmentTransaction无关紧要我想返回

在支持库23.1.1下,我成功跳回到片段#3。弹出包含#4的片段而不调用onViewCreated()。这似乎更直观,对我来说是正确的,因为调用onViewCreated()表示碎片&#34;外部&#34;我的FragmentTransaction似乎没必要吗?

我知道,addToBackStack()只保存事务状态而不是片段本身,并且可能必须重新创建片段。

有类似的posts,但我想了解为什么它在支持库更新后中断。我无法在任何地方找到变化。这是一个Bug还是现在的Bug?

我正在改变我的代码。

感谢您的帮助!

更新 升级到support-library 25.1.0后,我发现了更多生命周期问题/更改。有一个Google issue,我在其中另外评论了我的问题。目前我不得不回到最新的24.2.1并密切关注这个话题。这只是我的临时解决方案。这些问题始于support-library 25.0.0。

2 个答案:

答案 0 :(得分:6)

注意新支持 25.1.0

片段生命周期中的某些内容发生了变化 现在有新功能来优化操作并推迟片段转换。

阅读本文: https://code.google.com/p/android/issues/detail?id=230415

答案 1 :(得分:0)

有类似的问题。已修复于25.3.0