Android dataBinding 之 配合使用BaseAdapter适配器

Overview

数据绑定库与 Android Gradle 插件捆绑在一起。您无需声明对此库的依赖项,但必须启用它。
启用的方法为:

在我们的app/build.gradle下添加如下代码:

android{
dataBinding{
enabled=true
}
}

如何在布局文件中使用

先是看看我们的代码:





这样我们的layout布局文件就完成了。
来分析一下:
Android DataBinding layout界面解析图片
这样我们的数据绑定等操作就完成了。

看看我们的适配器是如何操作的

/**
* Date 5/3/2020
* Author CaoJiaHao
* Description DataBinding X BaseAdapter
**/
public class MainAdapter extends BaseAdapter {
private Context mContext;
private List usersList;

public MainAdapter(Context mContext, List usersList) {
this.mContext = mContext;
this.usersList = usersList;
}

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

@Override
public Object getItem(int i) {
return usersList.get(i);
}

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

@Override
public View getView(final int i, View view, ViewGroup viewGroup) {
ItmeLayoutBinding binding;
if (view == null) {
binding = DataBindingUtil.inflate(LayoutInflater.from(this.mContext), R.layout.itme_layout, viewGroup, false);
view = binding.getRoot();
view.setTag(binding);

//绑定我们的点击事件
view.findViewById(R.id.itemLayout_txtName).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(mContext, usersList.get(i).getName(), Toast.LENGTH_SHORT).show();
}
});
} else {
binding = (ItmeLayoutBinding) view.getTag();
}
binding.setVariable(BR.user, usersList.get(i));
return view;
}
}

这样我们的操作就完成了。来分析一下:
Android Databinding 适配器解析一
Android Databinding 适配器解析二
这个就是我们的适配器代码,其他的代码和正常的适配器没有啥区别。

如何使用这个适配器

使用他的话就和我们使用普通的适配器是一样的。看看代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
List usersList = new ArrayList<>();
int a = 30;
for (int i = 0; i < a; i++) {
UserInfo userInfo = new UserInfo(String.valueOf(i), "GreatCoder", "Male", "17");
usersList.add(userInfo);
}
ListView listview = this.findViewById(R.id.main_ListVew);
listview.setAdapter(new MainAdapter(this, usersList));
}

就是这么的简单。看看我们的运行效果图:

可以看到前面还有相关标识。

如何在绑定值中进行字符串拼接

这个就是我所使用的方法。是引用string中的值。但是需要注意的是!
不推荐!!这样去写:

android:text='@{"年龄: "+user.age}'

为啥不推荐怎么写?以为在DataBinding中如果出现错误,软件不会指向错误的地方。后期排查工作量非常的大。

DataBinding的坑

  1. 在使用适配器的时候BR报错或者是无法找到引用名称如user。
    如何解决:
    就是注意我们的实体类的命名,名字的第一个字母需要大写。不然你就会非常的难受,别问我为啥知道。
posted @ 2020-04-08 08:56  Leo726  阅读(2049)  评论(0)    收藏  举报