我正在使用Compose的AndroidView来重用我的Fragment,其中有GoogleMap。Map视图将像往常一样在onStart()
和onResume()
上启动和恢复。
override fun onStart() {
super.onStart()
Timber.d("Chargers Fragment OnStart")
bi.map.onStart()
}
override fun onResume() {
super.onResume()
Timber.d("Chargers Fragment OnResume")
bi.map.onResume()
字符串
我创建了一个FragmentContainer Composable来重用片段:
@Composable
fun FragmentContainer(
containerId: Int,
modifier: Modifier = Modifier,
fragmentManager: FragmentManager,
commit: FragmentTransaction.(containerId: Int) -> Unit,
onFragmentViewCreated: (containerId: Int) -> Unit
) {
var initialized by rememberSaveable { mutableStateOf(false) }
AndroidView(
modifier = modifier,
factory = { context ->
FragmentContainerView(context)
.apply { id = containerId }
},
update = { view ->
if (initialized) {
fragmentManager.onContainerAvailable(view)
onFragmentViewCreated(view.id)
} else {
fragmentManager.commit { commit(view.id) }
initialized = true
}
}
)
}
private fun FragmentManager.onContainerAvailable(view: FragmentContainerView) {
val method = FragmentManager::class.java.getDeclaredMethod(
"onContainerAvailable",
FragmentContainerView::class.java
)
method.isAccessible = true
method.invoke(this, view)
}
型
这个屏幕是底部导航的一部分,当导航到其他屏幕时,onPause()
根本没有被调用,回到同一个屏幕时,它不会调用onStart()
或onResume()
。我想这就是为什么我的Map没有加载。
我想以某种方式触发生命周期,如果可能的话,纠正我,如果我在一些错误的方向。
1条答案
按热度按时间uttx8gqw1#
当您导航离开并返回时,FragmentContainerView仍然存在于视图层次结构中,因此它不会经历生命周期事件onStart、onResume。
创建Map视图模型
字符串
使用视图模型管理Map状态
型
在你的作品中使用它
型