gpt4 book ai didi

android - lateinit 属性 viewModelFactory 尚未在 Fragment 中初始化

转载 作者:太空宇宙 更新时间:2023-11-03 10:58:49 26 4
gpt4 key购买 nike

我在我的 android 项目中使用 dagger 2(2.15 版)进行依赖注入(inject)。除了注入(inject) viewModelFactory 之外,一切正常。我无法将它注入(inject)到我的 fragment 中。

@Inject
lateinit var viewModelFactory: ViewModelProvider.Factory

private val mainViewModel: StationsViewModel by lazy {
ViewModelProviders.of(this, viewModelFactory)
.get(StationsViewModel::class.java)
}

我收到以下错误:

lateinit property viewModelFactory has not been initialized

我有 ViewModelModule:

@Module
abstract class ViewModelModule {

@Binds
@IntoMap
@ViewModelKey(MainViewModel::class)
internal abstract fun bindsMainViewModel(mainViewModel:
MainViewModel): ViewModel

@Binds
abstract fun bindViewModelFactory(factory: MyViewModelFactory):
ViewModelProvider.Factory
}

View 模型键

@MustBeDocumented
@Target(
AnnotationTarget.FUNCTION,
AnnotationTarget.PROPERTY_GETTER,
AnnotationTarget.PROPERTY_SETTER
)
@Retention(AnnotationRetention.RUNTIME)
@MapKey
annotation class ViewModelKey(val value: KClass<out ViewModel>)

和 ViewModelFactory

@Singleton
class MyViewModelFactory @Inject constructor(
private val creators: Map<Class<out ViewModel>, @JvmSuppressWildcards Provider<ViewModel>>
) : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
val creator = creators[modelClass] ?: creators.entries.firstOrNull {
modelClass.isAssignableFrom(it.key)
}?.value ?: throw IllegalArgumentException("unknown model class $modelClass")
try {
@Suppress("UNCHECKED_CAST")
return creator.get() as T
} catch (e: Exception) {
throw RuntimeException(e)
}

}
}

虽然我不太明白他们在做什么。

最佳答案

您可以尝试在 onViewCreated() 中启动吗?

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
mainViewModel = ViewModelProviders.of(this, viewModelFactory)
.get(StationsViewModel::class.java)
// binding.viewmodel = viewModel
}

应该没问题。

关于android - lateinit 属性 viewModelFactory 尚未在 Fragment 中初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50137246/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com