我试图发送三个值到我的UserViewModel
,但即使发送savedStateHandle
在我的Activity
中我有
private val viewModel: UserViewModel by viewModels()
则我的UserViewModel
为:
@HiltViewModel
internal class UserViewModel @Inject constructor(
private val myRepo: MyRepo,
private val savedStateHandle: SavedStateHandle,
) : ViewModel() {
但是这个savedStateHandle
是空的,我错过了什么?
我一直在使用@AssistedInject
这样做:
internal class UserViewModel @AssistedInject constructor(
...
@Assisted val name: String,
) : ViewModel() {
...
}
然后我必须创建一个Factory
@AssistedFactory
interface UserViewModelAssistedFactory {
fun create(name: String): UserViewModel
}
class Factory(
private val assistedFactory: UserViewModelAssistedFactory,
private val name: String, <-- value you want to pass
) : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return assistedFactory.create(name) as T
}
}
然后在Activity/Fragment
中,您必须按如下方式注入AssistedFactory
@Inject internal lateinit var assistedFactory: UserViewModel.UserViewModelAssistedFactory
private val userViewModel: UserViewModel by viewModels {
UserViewModel.Factory(assistedFactory, intent.getStringExtra(USER_NAME_ARG).orEmpty())
}
这样做它应该工作,但你的解决方案也应该工作,确保你发送的意图参数正确,因为它说的是null看起来像你传递的是不正确的,savedInstace.keys()
应该返回你从以前的Activity/Fragment
传递的一切。
如果你使用基于Android架构指南的MVVM,你可以从你的Activity/Fragment发送一个事件到视图模型,一旦你的视图被创建。
你必须在AppModule中添加savedStateHandle。你想注入savedStateHandle