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

Android RecyclerView使用DataBinding时ItemRowBinding缺失无法导入

问题根因

ItemRowBinding类无法生成/识别是多个代码错误叠加导致的,按影响优先级排序:

  • DataBinding布局格式不合法:<data>标签必须是<layout>根节点的第一个直接子元素,你当前把<data>写在了CardView布局节点之后,编译器完全不会将这个布局识别为DataBinding布局,自然不会生成对应Binding类
  • XML存在语法错误:布局里的TextView标签没有闭合,缺少结束的/>标记,XML编译直接失败,阻断了Binding类的生成流程
  • 导包路径完全错误:DataBinding生成的Binding类默认路径为[应用包名].databinding.[布局名驼峰形式]Binding,你写的com.main.databinding.databinding.ItemRowBinding多嵌套了两层无意义的databinding目录,按你代码里的模型类路径,应用包名应为com.main.bawmlabu,正确导包路径是com.main.bawmlabu.databinding.ItemRowBinding
  • 代码引用与XML定义不匹配:XML中声明的数据变量名为model,你在Adapter的bind方法里用了BR.modelClass,BR字段不存在也会导致编译失败
  • 存在拼写错误:XML里引用的点击监听类名写为CustomCliskListener(正确应为CustomClickListener),如果对应类名本身拼写不匹配,也会阻断编译
  • 未确认DataBinding开关:如果模块级build.gradle没有开启DataBinding编译开关,所有Binding类都不会生成
修复步骤
  1. 先确认开启DataBinding配置,在app模块的build.gradle的android配置块中加入以下内容,同步Gradle:
android {
    // 其他原有配置保持不变
    buildFeatures {
        dataBinding true
    }
}
  1. 修正item_row.xml的结构,将<data>节点移到最前,补全未闭合的标签,修正拼写错误,修正后代码如下:
<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <variable
            name="model"
            type="com.main.bawmlabu.models.Model" />

        <variable
            name="itemClickListener"
            type="com.main.bawmlabu.models.CustomClickListener" />
    </data>

    <androidx.cardview.widget.CardView
        android:id="@+id/card_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="@{() -> itemClickListener.cardClicked(model)}"
        android:orientation="vertical">

        <TextView
            android:id="@+id/tv_title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@{model.title}"/>
    </androidx.cardview.widget.CardView>
</layout>

注意:如果你的Model类里的标题字段确实命名为tittle,就保留@{model.tittle},否则改成和实体类字段一致的名称

  1. 修正Adapter代码,替换错误导包,修正BR引用,核心代码如下:
// 删掉原来错误的导包语句,换成正确的
import com.main.bawmlabu.databinding.ItemRowBinding;

@NonNull
@Override
public RecylcerAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    ItemRowBinding binding = DataBindingUtil.inflate(
            LayoutInflater.from(parent.getContext()),
            R.layout.item_row, parent, false);
    return new ViewHolder(binding);
}

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
    Model model = modelClassList.get(position);
    holder.bind(model);
    holder.itemRowBinding.setItemClickListener(this);
}

public class ViewHolder extends RecyclerView.ViewHolder {
    public ItemRowBinding itemRowBinding;

    public ViewHolder(ItemRowBinding itemRowBinding) {
        super(itemRowBinding.getRoot());
        this.itemRowBinding = itemRowBinding;
    }

    public void bind(Object obj) {
        // 把BR.modelClass改成和XML变量名一致的BR.model
        itemRowBinding.setVariable(BR.model, obj);
        itemRowBinding.executePendingBindings();
    }
}
  1. 所有修改完成后,依次点击Android Studio菜单栏的Build -> Clean Project,等待清理完成后再点击Build -> Rebuild Project,编译完成后ItemRowBinding就会正常生成,不会再报找不到类的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 02:54:20