问题描述
美好的一天,我试图间接创建自定义组件,因此我遵循了本教程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 (将#修改为@)