Android - 片段在删除最后一个片段之前添加到容器中

时间:2017-01-09 07:34:56

标签: android android-fragments fragmenttransaction

我对FragmentTransaction有疑问。因此,我依靠每个onDestroyView()中的onStop()Fragment来显示或隐藏活动底部的工具栏。以下是我进行交易的方式:

getSupportFragmentManager().beginTransaction()
    .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
    .replace(R.id.activity_frame, fragment, tag)
    .addToBackStack(tag)
    .commit();

当我调试时,它会显示新的Fragment在被替换的onCreateView()通过FragmentonDestroyView()之前经过onStop()

这刚刚发生,我意识到工具栏显示异常行为,直到今天早上还没有机会检查出来。有什么提示吗?

1 个答案:

答案 0 :(得分:2)

此行为在前一段时间在支持库中已更改,请参阅https://code.google.com/p/android/issues/detail?id=230415

您可以切换到该线程中描述的旧行为:

  

这是预期的行为更改。有一些新功能可以优化操作并推迟片段转换,这是一个副作用。

     

您可以通过调用FragmentTransaction.setAllowOptimization(false)来禁用片段操作优化。这会强制一切以正确的顺序发生,但也不允许优化操作。

另一种方法是不依赖于调用的onDestroyView()onStop(),而是处理新片段onCreateView()中已存在的工具栏。例如,总是替换onCreateView()中的工具栏,只删除onStop() / onDestroy()中的工具栏,如果工具栏仍然是由自己的片段创建的工具栏。