我一直在使用新的 dagger.android
注入(inject)功能,到目前为止我真的很喜欢它们。
但是,我遇到了这个小问题,似乎不可能现场注入(inject)适配器或我正在使用的基本上任何非 Activity 类。
我知道 @Inject
构造函数会更容易,但由于我通过构造函数将数据传递到我的 recyclerview,所以这不是我的选择。
这意味着我必须调用组件来注入(inject)我的类。
AppComponent
类看起来像这样:
interface AppComponent : AndroidInjector<App> {
@Component.Builder
abstract class Builder {
abstract fun networkModule(networkModule: NetworkModule): Builder
}
fun inject(someClass SomeClass)
}
生成的 DaggerAppComponent
在说完 DaggerAppComponent.builder().build()
之后无法识别 .inject()
方法
我显然对 Dagger 有一些误解,因为这似乎是注入(inject)类的规范方式。
我怀疑这是因为我正在从 AndroidInjector
进行扩展,但如果是这种情况,我将如何注入(inject)非 Activity 类。因为即使我只为那个类创建了一个 @Subcomponent
,它仍然需要从 DaggerAppComponent
最佳答案
这是一个品味问题(以及更完美的代码设计),但我认为您的做法不正确。
“因为我通过构造函数将数据传递到我的 recyclerview”是什么意思?您将数据分配给 Adapter,而不是 recyclerview 本身。
如果您不想(但可能应该)使用 MVP 方法,从某处加载数据然后使用 RCV 显示它的目标看起来像这样:
class TestFragment : Fragment() {
val recyclerView: RecyclerView by bind(R.id.recyclerview) // Custom view binding but whatever
val adapter: TestAdapter? = null
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view = inflater!!.inflate(R.layout.test, container, false)
// Initialize
recyclerView.layoutManager = LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false)
adapter = TestAdapter(mutableListOf())
recyclerView.adapter = adapter
// Add data
adapter.addItem(MyClass("Hey it's working"))
return view
}
}
至于安卓 Dagger ,我实际上并不觉得它比普通 Dagger 更有用。这让事情变得更加复杂。
我强烈建议使用 MVP for android。这是我的一个示例,它完全不需要 Activity/组件来注入(inject)任何依赖项,请随意查看 MVP sample
关于android - 是否可以使用 Dagger 2.11 现场注入(inject) Recycler View 适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45902830/