我使用 Jetpack Compose 和 Navigation Compose,我想将 id 传递给这个 viewmodel
:
class RecallViewModel(private val id:Long,application: Application):AndroidViewModel(application) {
............................
}
可组合函数:
我不知道如何在可组合函数中获取 application
:
@Composable
fun RecallScreen(
id:Long,
onEnd:() -> Unit
){
val recallViewModel = viewModel(factory = RecallViewModelFactory(
id = id,application = "i don't know how to get application"))
}
和工厂
class RecallViewModelFactory(private val id:Long,val application: Application):ViewModelProvider.AndroidViewModelFactory(application) {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return RecallViewModel(id,application) as T
}
}
composable(
"${Routes.recall}/{id}",
arguments = listOf(navArgument("id") { type = NavType.LongType })
) {
RecallScreen(
id = it.arguments!!.getLong("id"),
onEnd = {navController.navigateUp()}
)
}
id
作为navArgument
传递到你的屏幕中,作为你的路由的一部分?如果是这样,它已经通过默认支持的SavedStateHandle
可用于你的 ViewModel。你尝试手动构建工厂的特定原因是什么? - ianhanniballakeRecallScreen
中使用的composable
目标吗? - ianhanniballake