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

Android中BaseAdapter的数据绑定实现方法咨询

在BaseAdapter中使用Data Binding创建实例的方案

1. 先开启Data Binding支持

在你的app模块build.gradle中添加配置,确保Data Binding功能启用:

android {
    ...
    buildFeatures {
        dataBinding true
    }
}

2. 改造Item布局为Data Binding布局

把你的列表项布局(比如item_list.xml)用<layout>标签包裹,定义数据变量:

<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <!-- 替换成你自己的数据模型类全路径 -->
        <variable
            name="item"
            type="com.yourpackage.YourDataModel"/>
    </data>

    <!-- 原有布局内容,示例用TextView绑定数据 -->
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@{item.title}" />
</layout>

3. 在BaseAdapter中实现Data Binding

在Adapter的getView方法里创建/复用Data Binding实例,替代findViewById:

public class YourAdapter extends BaseAdapter {
    private List<YourDataModel> mData;
    private LayoutInflater mInflater;

    public YourAdapter(Context context, List<YourDataModel> data) {
        mInflater = LayoutInflater.from(context);
        mData = data;
    }

    @Override
    public int getCount() {
        return mData.size();
    }

    @Override
    public YourDataModel getItem(int position) {
        return mData.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // 自动生成的Binding类,命名规则:布局文件名驼峰化 + Binding
        ItemListBinding binding;

        if (convertView == null) {
            // 初始化Binding实例,替代LayoutInflater.inflate
            binding = ItemListBinding.inflate(mInflater, parent, false);
            convertView = binding.getRoot();
            // 将Binding实例存到View的Tag里,方便复用
            convertView.setTag(binding);
        } else {
            // 复用已有的Binding实例
            binding = (ItemListBinding) convertView.getTag();
        }

        // 绑定数据到布局
        binding.setItem(getItem(position));
        // 立即执行绑定操作,避免数据更新延迟
        binding.executePendingBindings();

        return convertView;
    }
}

关键说明

  • 自动生成的Binding类:系统会根据你的布局文件名自动生成,比如item_list.xml对应ItemListBinding,如果布局文件名是item_user_info.xml,则对应ItemUserInfoBinding
  • 数据模型要求:你的数据模型类(YourDataModel)需要有对应属性的getter方法,或者把属性设为public,Data Binding才能正常访问并绑定数据
  • 复用逻辑:通过View的Tag存储Binding实例,避免每次getView都重新创建,和ViewHolder的优化思路一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 01:10:27