如何重用动态生成的fragement?

时间:2018-03-14 16:17:25

标签: android android-fragments android-databinding

在我的活动的主要片段中,我生成了更多依赖于配置文件的片段。 当设备旋转时,我想重用之前生成的片段而不是再次创建它们。 这是创建方法,在主片段的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数据。

0 个答案:

没有答案