在我的活动的主要片段中,我生成了更多依赖于配置文件的片段。
当设备旋转时,我想重用之前生成的片段而不是再次创建它们。
这是创建方法,在主片段的onCreateView
中调用:
private fun initChildFragments(elementsContainer: LinearLayout) {
val transaction = childFragmentManager.beginTransaction()
for (element in config.elements) {
val id = element.id
// create new container for fragment
addElementContainer(elementsContainer, id)
// try to re-use old fragment
var fragment = childFragmentManager.findFragmentByTag(element.getTag())
if (fragment == null) {
// create new fragment (should only happen at first run)
fragment = TestFragment.newInstance()
}
// add fragment to our container.
transaction.replace(id, fragment, element.getTag()
}
transaction.commitNow()
}
private fun addElementContainer(container: LinearLayout, id: Int) {
val childContainer = FrameLayout(context)
childContainer.id = id
container.addView(childContainer)
// for test purposes to make the container visible
val textView = TextView(context)
textView.setText("ID: " + id)
container.addView(textView)
}
当我第一次启动应用程序时,一切正常。当我旋转设备时,findFragmentByTag找到的片段被添加到容器中。元素容器在屏幕上可见(通过文本视图),但片段不可见。
如果我每次设备旋转时重新创建片段,它们会再次出现在屏幕上,但随后我将松开所有ViewModel数据。