我的ProfileScreen有viewModel。
@Composable
fun ProfileScreen() {
val viewModel: ProfileViewModel = viewModel()
...
}每次我调用ProfileScreen时,都会创建新的viewModel。如何只为ProfileScreen创建一个ProfileScreen实例。我试图在viewModel之后注入https://insert-koin.io/docs/reference/koin-android/compose/,但当我尝试时
val viewModel: ProfileViewModel = viewModel()
Android抛出错误。
发布于 2021-06-11 11:30:09
或者在重组合调用之间使用remember()保存实例ViewModel
@Composable
fun ProfileScreen() {
val viewModel = remember { ProfileViewModel() }
...
}此外,rememberSaveable允许在重新创建活动之间的保存状态(也称为数据类)。
发布于 2021-05-16 17:09:23
当你摧毁可合成的时候,你的viewModel就会被摧毁,它可以存活下来,但是一旦你的可合成被摧毁,它就会被摧毁。
您可以做的是在一个比可组合的viewModel更长的作用域中创建ProfileScreen,然后将viewModel作为参数传递给它。
像这样的东西应该管用。
@Composable
fun MainScreen() {
val vModel : ProfileViewModel = viewModel()
....
ProfileScreen(vModel)
}发布于 2021-09-22 09:03:32
如果您想使用Koin将视图模型注入到可组合中,那么您应该遵循文档中描述的内容。
getViewModel() - fetch instance通过调用该方法,Koin将搜索该视图模型并提供一个实例。
下面是在我的应用程序中注入视图模型的一个例子。
fun ManualControlScreen(
onDrawerClick: () -> Unit,
viewModel: ManualControlViewModel = getViewModel<ManualControlViewModel>()
) {
// Your composable UI
}https://stackoverflow.com/questions/67559205
复制相似问题