添加自定义的Hilt组件

问题描述

美好的一天,我试图间接创建自定义组件,因此我遵循了本教程medium和本教程documentation。 但是当我运行该应用程序时,出现此错误,指示它无法创建 viewholdermanager kotlin.UninitializedPropertyAccessException:lateinit属性viewHolderManager尚未初始化。 因此,我相信根据我的理解“我使用了Dagger为我们生成的提供程序来创建ViewHolderComponent(自定义组件)的实例” 非常感谢您的帮助。预先感谢

这是我所做的:-

@Scope
@MustBeDocumented
@Retention(value = AnnotationRetention.RUNTIME)
annotation class ViewHolderScope

@ViewHolderScope
@DefineComponent(parent = ApplicationComponent::class)
interface ViewHolderComponent{

    @DefineComponent.Builder
    interface Builder {
        fun build(): ViewHolderComponent
        fun viewHolder(@BindsInstance viewHolder: RecyclerView.ViewHolder?): ViewHolderComponent.Builder?
    }
}

@Singleton
class ViewHolderManager @Inject constructor(
    private val viewHolderComponentProvider: Provider<ViewHolderComponent.Builder>
) {

    var viewHolderComponent: ViewHolderComponent? = null
        private set


    fun setViewHolder(viewHolder: RecyclerView.ViewHolder) {
        viewHolderComponent = viewHolderComponentProvider.get().viewHolder(viewHolder)?.build()
    }

}


@Module
@InstallIn(ViewHolderComponent::class)
class ViewHolderModule{

    @Provides
    @ViewHolderScope
    fun provideLifecycleRegistry(viewHolder: RecyclerView.ViewHolder): LifecycleRegistry = LifecycleRegistry(viewHolder)



    @Provides
    @ViewHolderScope
    fun provideArrayAdapter(viewHolder: RecyclerView.ViewHolder): ArrayAdapter<DataItem> = ArrayAdapter((viewHolder as BaseItemViewHolder<*,*>).parent.context,R.layout.item_dropdown_menu_popup,ArrayList())

}

class SavedCarItemViewHolder():  RecyclerView.ViewHolder(...){

    @EntryPoint
    @InstallIn(ViewHolderComponent::class)
    interface ViewHolderEntryPoint {
        fun getLifecycleRegistry(): LifecycleRegistry
        fun getDataItemArrayAdapter(): ArrayAdapter<DataItem>
    }



    protected fun onCreate() {
        injectDependencies()
    }

    lateinit var lifecycleRegistry: LifecycleRegistry
    @Inject lateinit var viewHolderManager:ViewHolderManager
    fun injectDependencies() {
        val hiltEntryPoint = EntryPoints.get(viewHolderManager.viewHolderComponent,ViewHolderEntryPoint::class.java)
        lifecycleRegistry = hiltEntryPoint.getLifecycleRegistry()
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)