我正在将Dagger2用于Android应用中的DI
我想通过AndroidInjector
在片段中注入viewModel并具有这两行:
AndroidInjection.inject(this)
viewModel = ViewModelProviders.of(this, viewModelFactory).get(ProductDetailViewModel::class.java)
当我的片段扩展androidx.fragment.app.Fragment
时显示此错误:
android.support.v4.app.Fragment
android.app.Fragment
现在我不知道我的片段应该扩展哪一个!
选择其中一个时出现此错误:
None of the following functions can be called with the arguments supplied:
public open fun inject(activity: Activity!): Unit defined in dagger.android.AndroidInjection
public open fun inject(fragment: Fragment!): Unit defined in dagger.android.AndroidInjection
public open fun inject(service: Service!): Unit defined in dagger.android.AndroidInjection
public open fun inject(contentProvider: ContentProvider!): Unit defined in dagger.android.AndroidInjection
答案 0 :(得分:2)
我的错误是使用dagger-android(而不是dagger-android-support),而dagger-android仅具有:
AndroidInjection.inject(this)
但我应该使用
AndroidSupportInjection.inject(this)
supportdLibrary版本的dagger-android-support
答案 1 :(得分:0)
androidx是重构的库名称空间。
AndroidX是对原始Android支持的重大改进 图书馆。与支持库一样,AndroidX与 Android操作系统,并提供跨Android的向后兼容性 发布。 AndroidX通过提供以下功能完全替代了支持库 功能奇偶校验和新库。see here
所以我建议您首先将代码迁移到androidx。 为此。
重构>迁移到Androidx。
和荣誉,您再也不会与库版本发生冲突了。
答案 2 :(得分:0)
Google向我们介绍了AndroidX,为了使所有开发人员都在同一页面上,他们不赞成使用Fragment,并且使支持片段成为AndroidX的一部分。因此,您必须与Jetpack的一部分的AnroidX一起为用户提供支持片段。...