我对FragmentTransaction
有疑问。因此,我依靠每个onDestroyView()
中的onStop()
和Fragment
来显示或隐藏活动底部的工具栏。以下是我进行交易的方式:
getSupportFragmentManager().beginTransaction()
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.replace(R.id.activity_frame, fragment, tag)
.addToBackStack(tag)
.commit();
当我调试时,它会显示新的Fragment
在被替换的onCreateView()
通过Fragment
和onDestroyView()
之前经过onStop()
。
这刚刚发生,我意识到工具栏显示异常行为,直到今天早上还没有机会检查出来。有什么提示吗?
答案 0 :(得分:2)
此行为在前一段时间在支持库中已更改,请参阅https://code.google.com/p/android/issues/detail?id=230415
您可以切换到该线程中描述的旧行为:
这是预期的行为更改。有一些新功能可以优化操作并推迟片段转换,这是一个副作用。
您可以通过调用FragmentTransaction.setAllowOptimization(false)来禁用片段操作优化。这会强制一切以正确的顺序发生,但也不允许优化操作。
另一种方法是不依赖于调用的onDestroyView()
和onStop()
,而是处理新片段onCreateView()
中已存在的工具栏。例如,总是替换onCreateView()
中的工具栏,只删除onStop()
/ onDestroy()
中的工具栏,如果工具栏仍然是由自己的片段创建的工具栏。