- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
现在,当我尝试在我的设备中运行我的应用程序时显示此错误
Caused by: kotlin.UninitializedPropertyAccessException: lateinit property viewModelFactory has not been initialized
class MainFragment : Fragment() {
private lateinit var binding: FragmentMainBinding
private lateinit var adapter: MainAdapter
private lateinit var viewModel: MainViewModel
@Inject lateinit var viewModelFactory: MainViewModelFactory
...
private fun populateUi() {
viewModel = ViewModelProviders.of(this, viewModelFactory).get(MainViewModel::class.java)
...
}
}
class MainViewModelFactory @Inject constructor(private val mainViewModel: MainViewModel) : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
if (modelClass.isAssignableFrom(MainViewModel::class.java)) {
return mainViewModel as T
}
throw IllegalArgumentException("Unknown class name")
}
}
@Module
class ViewModelModule {
@Provides
@Singleton
fun provideMainViewModel(factory: MainViewModelFactory): ViewModelProvider.Factory = factory
}
@Singleton
@Component(modules = [
AndroidInjectionModule::class,
BuilderModule::class,
AppModule::class,
NetworkModule::class,
DaoModule::class,
ViewModelModule::class
])
interface AppComponent {
fun inject(app: App)
}
@ContributeAndroidInjector
的模块对于 Activity 和 fragment
@Module
abstract class BuilderModule {
@ContributesAndroidInjector
abstract fun contributeMainActivity(): MainActivity
@ContributesAndroidInjector
abstract fun contributeMainFragment(): MainFragment
}
class App : Application(), HasActivityInjector, HasSupportFragmentInjector {
@Inject
lateinit var activityInjector: DispatchingAndroidInjector<Activity>
@Inject
lateinit var fragmentInjector: DispatchingAndroidInjector<Fragment>
override fun onCreate() {
super.onCreate()
DaggerAppComponent
.builder()
.appModule(AppModule(this))
.networkModule(NetworkModule("https://jsonplaceholder.typicode.com/"))
.build()
.inject(this)
}
override fun activityInjector(): AndroidInjector<Activity> {
return activityInjector
}
override fun supportFragmentInjector(): AndroidInjector<Fragment> {
return fragmentInjector
}
}
最佳答案
我通过添加解决了这个问题
override fun onAttach(context: Context?) {
super.onAttach(context)
AndroidSupportInjection.inject(this)
}
BuilderModule
?
关于android - 使用 fragment 时 viewModelFactory 变量尚未初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52802191/
我第一次尝试安卓ViewModel和 Hilt DI 正如我从下面的链接了解的那样,要在运行时使用值初始化 ViewModel,我应该使用 ViewModelFactory Use a ViewMod
我正在做一些 kotlin fundamentals 的代码实验室而且我并没有真正使用 ViewModel 进入 android,为什么有时似乎需要通过 ViewModelFactory 创建它。 H
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 3 年前。 Improve this qu
我正在尝试在 ViewModel 类中传递一个构造函数参数。但我不明白这样做的最佳方法。请看一下代码和评论,让我知道最简单和合适的方法。 class MainActivity : AppCompatA
我正在尝试在我的 Activity 和我的 fragment 之间共享一个 ViewModel。我的 ViewModel 包含一个 report,这是一个我无法序列化的复杂对象。 protec
我正在尝试在 MVVM 架构中使用 Dagger2、Rxjava2、Retrofit2 设计一个应用程序。我在模型(存储库)类中得到响应,我想将其传递给我的 ViewModel,为此我必须设计自己的
我正在使用著名的 Dagger-ViewModelFactory 模式来为所有 ViewModel 注入(inject)工厂。在所有的 Activity 中。 @ActivityScope class
现在,当我尝试在我的设备中运行我的应用程序时显示此错误 Caused by: kotlin.UninitializedPropertyAccessException: lateinit propert
我复制了一个带有 Android 架构组件、Retrofit、Dagger 和数据绑定(bind)的 MVVM 示例。我将此代码用作我的应用程序的起点,以便开始在 Android 应用程序开发中使用更
我在我的 android 项目中使用 dagger 2(2.15 版)进行依赖注入(inject)。除了注入(inject) viewModelFactory 之外,一切正常。我无法将它注入(inje
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 3 年前。
所以我正在使用 Dagger 开发一些示例 MVVM 项目。我有一个像这样的 View 模型工厂: class DaggerViewModelFactory @Inject constructor(p
我用 MVVM 模式开发应用程序。我想在用户旋转屏幕时保存 UI。 MyViewModel.kt class MyViewModel(val repository: SomeRepository,
与此问题相关:Espresso, Dagger2 set ViemodelProvider.Factory on BaseActivity 在我的测试期间,为了让 espresso 测试在 Andro
我使用 Jetpack Compose 和导航 compose,我想将 id 传递给 viewmodel : class RecallViewModel(private val id:Long,app
我想知道以下两种方法中哪一种更适合我的 Android 应用程序及其原因。 第一个是使用viewmodelfactory模式,第二个是viewModelStoreProvider。谁能阐明这些方法?
我试着效仿谷歌的例子(ViewModelModule)。我看到它可以将不同的 ViewModel 类型绑定(bind)到通用类型。 @Module abstract class ViewModelMo
我最近开始从事 Android 开发,并且来自 iOS 背景,依赖注入(inject)框架和 ViewModelFactories 等概念对我来说是一个新事物。在我看到的所有教程中,ViewModel
到目前为止,我遵循 Android 开发人员指南了解架构组件,当然,问题是他们的示例无法与默认工厂一起使用,原因是“无零参数异常”。我遵循了 Google 示例存储库上的一些逻辑,以及相当多的 Sta
我是一名优秀的程序员,十分优秀!