Jetpack Compose In Fragment 不会在 popbackstack 上重新组合



我在这里使用的是jetpack导航组件,而不是Compose导航组件,因为在我的应用程序中有一些区域我还不能转换。

我遇到的问题是:

片段A在它的xml中开始并包含一个ComposeView。片段A打开片段b,但是,当你返回到片段A时,ComposeView是空的,不显示任何东西。

这是一个bug吗?大家知道吗?是我做错了什么吗?我查看了视图组合策略的设置,并尝试了每个选项,但都不起作用。

我找到了答案。我有一个BaseFragment:

abstract class BaseFragment : Fragment() {
private var hasInitializedRootView = false
private var rootView: View? = null
protected abstract val layoutId: Int
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return getPersistentView(inflater, container, savedInstanceState, layoutId)
}
private fun getPersistentView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?, layout: Int): View? {
if (rootView == null) {
// Inflate the layout for this fragment
rootView = inflater?.inflate(layout, container, false)
} else {
// Do not inflate the layout again.
// The returned View of onCreateView will be added into the fragment.
// However it is not allowed to be added twice even if the parent is same.
// So we must remove rootView from the existing parent view group
// (it will be added back).
(rootView?.parent as? ViewGroup)?.removeView(rootView)
}
return rootView
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
if (!hasInitializedRootView) {
hasInitializedRootView = true
viewCreated(view, savedInstanceState)
}
}
abstract fun viewCreated(view: View, savedInstanceState: Bundle?)
}

将会发生的是onCreateView不会被调用,合成不会重新启动。改成使用一个普通的片段可以完美地修复这个问题。

最新更新