使用dagger2时未生成DataBindingComponent

Jas*_*dge 9 data-binding android kotlin dagger-2

在编译我的应用程序时,我在所有生成的WhateverFragmentOrActivityBinding类上收到以下错误:

error: cannot find symbol
  protected WhateverFragmentOrActivityBinding(DataBindingComponent _bindingComponent, View _root,
                                         ^
  symbol:   class DataBindingComponent
  location: class WhateverFragmentOrActivityBinding
Run Code Online (Sandbox Code Playgroud)

DataBindingComponent级似乎没有产生.

看一下DataBindingComponent我们看到的文档:

如果使用Dagger 2,开发人员应扩展此接口并将扩展接口注释为Component.

我确实使用Dagger 2,所以我怀疑这可能是相关的.我自己试图这样做,无济于事,无法在互联网上找到它.这就是我尝试过的:

@Component(dependencies = [AppComponent::class], modules = [(AppModule::class), (AndroidInjectionModule::class), (ActivityBuilderModule::class)])
interface BindingComponent : DataBindingComponent
Run Code Online (Sandbox Code Playgroud)

但是,从未生成DaggerBindingComponent类,因为找不到我已经拥有的符号错误.这似乎是鸡和鸡蛋的问题,所以我不相信这是我的问题的解决方案.

DataBindingComponent似乎负责处理BindingAdapters.我有一些自定义绑定适配器用于绑定ImageView src属性,但即使注释掉这些适配器也无济于事,所以我不确定它们是否相关.

我尝试完全从应用程序中删除Dagger,问题没有消失.不知道还有什么可以尝试

u_u

小智 1

几天前我遇到了同样的问题,我正在使用产品风味,其中一个(我当前正在研究的那个)无法访问所需的类,这导致所有绑定类失败,我是每个 Activity 或 Fragment 绑定类上都会出现多个错误。

我也在使用 Dagger2,并且我的一个模块无法访问类(CustomBroadcastReceiver)

@Module
abstract class BroadcasReceiverModule {

    @ContributesAndroidInjector
    internal abstract fun contributePhoneStateBroadcastReceiver(): CustomBroadcastReceiver
}
Run Code Online (Sandbox Code Playgroud)

在构建过程后从未显示此错误,BroadcastReceiverModule 是我的“主要”资源的一部分,但对于我正在开发的 CustomBroadcastReceiver 不存在的地方来说,它不是必需的

即使它不是必需的,它仍然生成了一堆错误,在我从“主”资源中删除 BroadcastReceiverModule 并将其仅放置在实际需要的风格上后,这些错误消失了