我已遵循Android体系结构蓝图Dagger2进行依赖项注入:https://github.com/googlesamples/android-architecture/tree/todo-mvp-dagger
现在我想将Adapter注入我的Fragment类:
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="ovladani">
<input type="checkbox" value="-y1" class="regulaceTeploty">
<h2>Tempeture regulation</h2>
<input type="checkbox" value="-a" class="radOvladac">Heater<br>
<input type="checkbox" value="-b" class="radOvladac">Ground heater 1<br>
<input type="checkbox" value="-c" class="radOvladac">Ground heater 2<br>
<input type="checkbox" value="-d" class="radOvladac">Funcoil<br>
</div>
我在模块类中有以下内容:
@ActivityScoped
class MainFragment @Inject
constructor(): DaggerFragment() {
@Inject lateinit var adapter : ArtistAdapter
}
但是由于某种原因,它无法在RecyclerView中显示数据。当我不使用注入而仅使用@Module
abstract class MainModule {
@FragmentScoped
@ContributesAndroidInjector
internal abstract fun mainFragment(): MainFragment
@Module
companion object {
@Provides
@ActivityScoped
@JvmStatic internal fun provideArtistAdapter() = ArtistAdapter()
}
}
时,它就可以工作。
使用Dagger2注射时我缺少什么?
附录:
val adapter = ArtistAdapter()
正在将回调实现为点击侦听器:
mainFragment
然后:
interface ArtistClickCallback {
fun onClick(artist: LastFmArtist, poster : ImageView)
}
这是片段模块:
class MainFragment : DaggerFragment(), ArtistClickCallback
但是当我从Fragment构造函数中删除@Inject时,出现以下异常:
@Module
class MainFragmentModule {
@Provides
fun provideArtistAdapter(mainFragment: MainFragment) = ArtistAdapter(mainFragment)
}
答案 0 :(得分:1)
从Fragment构造函数中删除@Inject,并将适配器提供给片段,或在适配器中使用inject构造函数
@Module
abstract class MainModule {
@FragmentScoped
@ContributesAndroidInjector(modules = [MyAwesomeFragmentModule::class])
internal abstract fun mainFragment(): MainFragment
}
-
@Module
class MyAwesomeFragmentModule {
@Provides
fun provideArtistAdapter() = ArtistAdapter()
}