【发布时间】:2021-10-11 11:25:07
【问题描述】:
我开始实现Jetpack Compose 并且好奇:将GoogleMap 存储在ViewModel 中是一个好的决定吗?检查它的内部,我没有发现它包含任何Context,因此它应该是不知道上下文的并且可以存储在VM 中。
示例代码为:
class MapViewModel() : ViewModel() {
val gMapAsync = MutableLiveData<GoogleMap>()
}
@Composable
fun MapViewContainer(
viewModel: MapViewModel
) {
val map = rememberMapViewWithLifecycle()
AndroidView({ map }) { mapView: MapView ->
mapView.getMapAsync {
viewModel.gMapAsync.value = it
}
}
}
我看到的另一种方法是使用内部变量或其他东西(如回调):
internal val gMapAsync = MutableLiveData<GoogleMap>()
【问题讨论】:
-
我没有尝试过,但有一个 Mitch 的视频恰好触及了这个主题。该视频解释了如何在 Viewmodel 中存储 GoogleMap 以及为什么它是安全的:youtube.com/watch?v=J8OqN-JqWlQ&ab_channel=CodingWithMitch
标签: android google-maps kotlin mvvm android-jetpack-compose