当使用 Android Compose Navigation 和 ViewModel 时,需要注意它们的生命周期。在 Composable 函数中使用 ViewModel 要确保 ViewModel 的生命周期与 Composable 函数的生命周期相同。
在以下示例中,我们将展示如何在 Composable 函数中使用 ViewModel,并且使它们的生命周期相同。
首先,创建一个 ViewModel,例如:
class MyViewModel : ViewModel() {
// ... ViewModel 实现
}
然后,在 Composable 函数中使用 ViewModel,例如:
@Composable
fun MyComposable(viewModel: MyViewModel = viewModel()) {
// 获取视图模型 ViewModel
val myViewModel = viewModel
// 将视图绑定到 ViewModel 数据的观察者,将在字段变化时自动重新拉取。
val myData = myViewModel.myLiveData.observeAsState()
// ... Composable UI 实现
}
上述代码中的 observeAsState() 方法将观察项作为 State 对象返回。这意味着 Composable 函数将会观察 ViewModel 中 live data 的变化,并且自动重绘视图。
注意,通过将视图模型传递给函数 MyComposable(),ViewModel 将由 Navigation 控制器创建。当离开这个目标时,会自动清空 ViewModel 实例。
因此,当使用 Android Compose Navigation 和 ViewModel 时,确保 ViewModel 的生命周期与 Composable 函数的生命周期相同,以避免内存泄漏和其他问题。