是否有可能在Dagger 2.11中注入Recycler View适配器

我一直在使用新的dagger.android注射功能,到目前为止,我真的很喜欢他们。

但是,我遇到了这个小问题,看来不可能现场注入适配器或基本上我使用的任何非活动类。

我知道@Inject构造函数会更容易,但是因为我通过构造函数将数据传递给了我的recyclerview,所以这不是我的选择。

这意味着我必须调用组件来注入我的类。

使用如下所示的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() DaggerAppComponent.builder().build()

我显然是误解了一些关于Dagger的东西,因为这好像是注入类的规范方式。

我怀疑这是因为我从AndroidInjector扩展,但如果是这样的话,我将如何注入一个非活动类。 因为即使我为这个类创建了一个@Subcomponent ,它仍然需要从DaggerAppComponent

这是一个品味(更完美的代码设计)的问题,但我不认为你是这样做的正确方法。

你是什​​么意思,“因为我通过构造函数将数据传递给我的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 } } 

至于android的匕首,我实际上并没有比普通的匕首更有用。 这使事情变得更加复杂。

我强烈建议使用MVP的android。 下面是我的一个示例,它消除了任何需要注入任何依赖关系的活动/组件,随时查看MVP示例

Interesting Posts