【问题标题】:How to pass parameter from dagger to Adapter in kotlin如何在kotlin中将参数从匕首传递到适配器
【发布时间】:2018-05-24 13:54:54
【问题描述】:

提供者

   @Module
abstract class AddScriptOrContractFragmentProvider {
    @ContributesAndroidInjector(modules = [(AddScriptOrContractFragmentModule::class)])
    abstract fun provideAddScriptOrContractFragmentFactory(): AddScriptOrContractFragment
}

模块

 @Module
class AddScriptOrContractFragmentModule {

  @Provides
    fun provideAddScriptOrContractAdapter(context : Context, addScriptOrContractViewModel: AddScriptOrContractViewModel,manageScrip: ManageScrip): AddScriptOrContractAdapter {
        return AddScriptOrContractAdapter(
                ArrayList<AddScrip>(),
                context,
                manageScrip, // ManageScrip is Data class unable to get 
                addScriptOrContractViewModel
        )
    }

}

适配器

    class AddScriptOrContractAdapter(private val mScripResponseList: MutableList<AddScrip>?,
                                 private val context: Context, private val manageScrip: ManageScrip?,
                                 private val viewModel: AddScriptOrContractViewModel) : RecyclerView.Adapter<BaseViewHolder>() {
}

片段

mLayoutManager.orientation = LinearLayoutManager.VERTICAL
    mAddScriptAdapter = AddScriptOrContractAdapter(scripList, context!!, manageScrip,addScriptOrContractViewModel)
    mAddScriptContractBinding.addScriptRecyclerView.layoutManager = LinearLayoutManager(activity)
    mAddScriptContractBinding.addScriptRecyclerView.itemAnimator = DefaultItemAnimator()
    mAddScriptContractBinding.addScriptRecyclerView.adapter = mAddScriptAdapter

错误处理

error: [dagger.android.AndroidInjector.inject(T)] view.marketWatch.manage.ManageScrip
 cannot be provided without an @Inject constructor or from an @Provides-annotated method.

我想要做的是使用 dagger 在适配器中进行数据绑定。我想向适配器发送一个数据类对象,并在该对象上进行一些业务登录。 我不明白我做错了什么,当我发送 arraylist() 时它工作正常,但是当我尝试发送对象或字符串时,它面临的错误请帮忙。提前交税

【问题讨论】:

  • 如何创建ManageScrip的实例?
  • @Inject lateinit var manageScrip : ManageScrip
  • 我不知道我应该如何提供的问题?请帮助我。如果您有任何示例,请提供给我

标签: android kotlin dagger-2 android-databinding


【解决方案1】:

像错误状态一样,有两种可能的方式来提供依赖:

构造函数注入的第一个:

data class ManageScrip @Inject constructor(val dependency: Dependency)

其次通过在模块中使用带注释的方法来实现它:

@Module
class ProvidingModule {
    @Provides
    fun provideManageScrip(dependency: Dependency) =
            ManageScrip("some", "properties")
}

这完全取决于您的设置以及您实际必须如何创建ManageScrip。一般来说,数据类使用第二种方法是合理的。

【讨论】:

  • (dependency: Dependency) 抱歉,我不明白这里的依赖是什么意思,之前我尝试过'@Module class AddScriptOrContractFragmentModule { @Provides fun provideManageScrip(manage : ManageScrip) = ManageScrip("some", " properties") }' 这种类型,但我面临循环错误...基本上我想将数据类从片段发送到适配器..您的答案看起来很有趣,但我无法理解...匕首中的新功能
  • 这就是我问你如何创建实例的原因。如果您只想将信息从一个地方传递到另一个地方,请考虑调查工厂。否则,您必须以不同的方式设置组件。无论如何,您没有就您所面临的问题提供足够的信息。
猜你喜欢
  • 1970-01-01
  • 2019-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-30
  • 1970-01-01
  • 1970-01-01
  • 2018-08-19
相关资源
最近更新 更多