You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

动态功能模块使用App模块@BindingAdapter出现编译错误求助

解决动态功能模块无法识别App模块BindingAdapter的问题

我之前也踩过这个一模一样的坑!结合你的代码和报错信息,主要有几个关键点需要修正,一步步来:

1. 修正布局中的属性命名空间

你的布局里ImageView的imageSrc属性没有使用app:前缀,这会导致Data Binding无法匹配到你定义的BindingAdapter。自定义的BindingAdapter属性属于app命名空间(对应布局里的xmlns:app="http://schemas.android.com/apk/res-auto"),必须加上前缀:

<androidx.appcompat.widget.AppCompatImageView
    android:id="@+id/ivAvatar"
    app:imageSrc="@{item.userId}" <!-- 这里补上app:前缀 -->
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:adjustViewBounds="true"
    android:src="@drawable/avatar_1_raster"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

2. 确保BindingAdapter函数的跨模块可见性

在Kotlin中,函数默认的可见性是internal(仅当前模块可见),而你的BindingAdapter定义在App模块,动态功能模块属于独立模块,自然无法访问。你需要显式将函数声明为public(Kotlin中可以省略public关键字,但要确保没有用internal修饰):

@BindingAdapter("imageSrc") 
fun setImageUrl(view: ImageView, userId: Int) { // 确保是public可见性
    try { 
        val drawableRes = when { 
            userId % 6 == 0 -> R.drawable.avatar_1_raster 
            userId % 6 == 1 -> R.drawable.avatar_2_raster 
            userId % 6 == 2 -> R.drawable.avatar_3_raster 
            userId % 6 == 3 -> R.drawable.avatar_4_raster 
            userId % 6 == 4 -> R.drawable.avatar_5_raster 
            else -> R.drawable.avatar_6_raster 
        } 
        val requestOptions = RequestOptions() 
            .placeholder(R.drawable.ic_launcher_background) // 链式调用更简洁
        Glide 
            .with(view.context) 
            .setDefaultRequestOptions(requestOptions) 
            .load(drawableRes) 
            .into(view) 
    } catch (e: Exception) { 
        e.printStackTrace() 
    } 
}

3. 验证动态功能模块的依赖配置

确保你的动态功能模块(比如features/post_detail)在build.gradle中正确依赖App模块,并且启用了Data Binding:

android {
    ...
    buildFeatures {
        dataBinding true // 必须启用Data Binding
    }
}

dependencies {
    // 依赖基础App模块
    implementation project(':app')
    // 其他必要依赖(比如Glide)
    implementation 'com.github.bumptech.glide:glide:4.15.1'
    kapt 'com.github.bumptech.glide:compiler:4.15.1'
}

4. 清理缓存并重建项目

有时候Android Studio的缓存会导致注解处理器没有正确扫描到跨模块的BindingAdapter,执行以下步骤:

  • 点击File -> Invalidate Caches...,选择Invalidate and Restart
  • 重启后,执行Build -> Clean Project
  • 再执行Build -> Rebuild Project

完成以上步骤后,动态功能模块应该就能正确识别App模块中的BindingAdapter了。

内容的提问来源于stack exchange,提问作者Thracian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 16:13:17