Как передать параметр из кинжала в адаптер в котлине - PullRequest
0 голосов
/ 24 мая 2018

Провайдер

   @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>() {
}

Fragement

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.

Я пытаюсь сделать привязку данных в адаптере с кинжалом.Я хочу отправить объект, который является классом данных для адаптера, и на этом сделать бизнес войти.Я не понимаю, что я делаю неправильно, когда я отправляю arraylist (), он работает нормально, но когда я пытаюсь отправить объект или строку с ошибкой, пожалуйста, помогите.Танкс заранее

1 Ответ

0 голосов
/ 28 мая 2018

Подобно состояниям ошибки, существует два возможных способа предоставления зависимости:

Первый - путем внедрения в конструктор:

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

Второй - реализация его с помощью аннотированного метода в модуле.:

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

Все зависит от ваших настроек и способа создания ManageScrip.В общем случае для классов данных было бы разумно использовать второй подход.

...