我目前正在开发一个使用 Jetpack Compose 并将地图与标记合并的 Android 应用程序。最初一切似乎都运行良好 - 地图正确加载并且标记按预期显示。但是,当我重新单击底部导航项时,我遇到了一个问题。
重新单击底部导航项后,地图及其相关标记似乎正在被销毁并重新加载。这会导致地图上的标记丢失。我尝试通过利用 RememberMarkerPosition 和 RememberCameraPosition 来保留标记和相机位置的状态来解决此问题,但不幸的是,这种方法并未解决问题。
我怀疑 Jetpack Compose 或地图库中可能存在一些我没有完全掌握的潜在生命周期或状态管理复杂性。
是否有其他人在使用 Jetpack Compose 和地图时遇到过类似的问题,重新单击底部导航项时标记会被删除?如果是这样,您采用了哪些策略或技术来确保即使在此类 UI 交互之后仍保留标记?我非常感谢任何能帮助我克服这一挑战的见解、代码示例或指导。
这是我用作参考的代码的简化版本:
@Composable
fun LocationMap(latLng: LatLng) {
val mapProperties by remember {
mutableStateOf(
MapProperties(maxZoomPreference = 30f, minZoomPreference = 5f)
)
}
val mapUiSettings by remember {
mutableStateOf(
MapUiSettings(mapToolbarEnabled = false)
)
}
GoogleMap(properties = mapProperties, uiSettings = mapUiSettings, cameraPositionState = rememberCameraPositionState {
position = CameraPosition.fromLatLngZoom(
com.google.android.gms.maps.model.LatLng(
latLng.latitude,
latLng.longitude
), 15f
)
}) {
Marker(
state = MarkerState(
position = com.google.android.gms.maps.model.LatLng(
latLng.latitude,
latLng.longitude
)
),
title = "Title"
)
}
}
另外,我正在使用最新的撰写地图库。
我的导航项单击功能存在 saveState,如下所示:
onClick = {navController.navigate(item.screen_route) {
navController.graph.startDestinationRoute?.let { screen_route ->
popUpTo(screen_route) {
saveState = true
}
}
launchSingleTop = true
restoreState = true
}
}
感谢您提供的任何帮助,帮助我在重新单击 Jetpack Compose 中的底部导航项后解决此标记保留问题。
不幸的是,我认为没有很好的解决方案。
我们通过实现
HorizontalPager
解决了同样的问题,使地图视图始终保留在内存中。一旦不重绘就不会闪烁。