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
相关产品推荐
相关产品推荐

