Android dataBinding 之 配合使用BaseAdapter适配器

Posted Great Coder

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android dataBinding 之 配合使用BaseAdapter适配器相关的知识,希望对你有一定的参考价值。

Overview

绑定适配器负责发出相应的框架调用来设置值。例如,设置属性值就像调用 setText() 方法一样。再比如,设置事件监听器就像调用
setOnClickListener() 方法。

数据绑定库允许您通过使用适配器指定为设置值而调用的方法、提供您自己的绑定逻辑,以及指定返回对象的类型。

看看如何实现的吧

首先我们看一下我们的item.xml

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <variable
            name="user"
            type="com.example.databinding_demo.UserInfoEntity" />
    </data>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@{user.name+user.gender}"
            android:textColor="@android:color/holo_blue_light" />

    </LinearLayout>
</layout>

我们先是创建了一个UserInfoEntity的实体类。里面就两个属性,这里就不贴代码了。
然后我们可以看到我们这里使用的ListView控件中的子布局。他绑定的就是我们的UserInfoEntity然后里面的TextView绑定的是我们的name 和 gender.
这里如果你有数据绑定的基础做起来还是非常的简单的。

然后我们看一下如何根据数据绑定创建一个BaseAdapter的适配器。
按照惯例先看看代码:

public class ItemAdapter extends BaseAdapter {
    List<UserInfoEntity> usersItem = new ArrayList<>();
    private Context context;

    public ItemAdapter(List<UserInfoEntity> usersItem, Context context) {
        this.usersItem = usersItem;
        this.context = context;
    }

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

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

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

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        ItemBinding dataBinding;
        if (view == null) {
            dataBinding = DataBindingUtil.inflate(LayoutInflater.from(this.context), R.layout.item, viewGroup, false);
            view = dataBinding.getRoot();
            view.setTag(dataBinding);
        } else {
            dataBinding = (ItemBinding) view.getTag();
        }

        dataBinding.setVariable(BR.user,usersItem.get(i));
        return view;
    }
}

这里可以看到就是getView方法和普通的适配器不一样。
好~接着看一下如何使用吧:
首先我们实例化一个Binding。
然后将我们的Binding绑定到我们的View中去。但是在这个之前我们需要判断一个view是否为空 。
然后通过绑定Tag来实现。
最后我们需要通过设置dataBinding的变量来完成数据绑定。

现在我们的适配器完成了。然后看看如何使用我们的适配器吧。
显示看一下界面代码:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <ListView
            android:id="@+id/main_ListView"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

然后是我们的活动逻辑代码:
public class MainActivity extends AppCompatActivity {
private ActivityMainBinding binding;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
    List<UserInfoEntity> usersList = new ArrayList<>();
    int a = 30;
    for (int i = 0; i < a; i++) {
        usersList.add(new UserInfoEntity("Jia Hao", "Male"));
    }
    binding.mainListView.setAdapter(new ItemAdapter(usersList, MainActivity.this));
}

}

首先需要实例化我们的活动数据绑定的dataBinding然后初始化数据,最后使用binding进行数据绑定,在这个期间不需要使用任何的控件初始换,可以说是非常的方便。
这样我们的适配器就调用成功了。非常简单。

以上是关于Android dataBinding 之 配合使用BaseAdapter适配器的主要内容,如果未能解决你的问题,请参考以下文章

Android JetPack组件之DataBinding的使用详解

android jectpack DataBinding 数据绑定 改变ui的几种方式

android jectpack DataBinding 数据绑定 改变ui的几种方式

android jectpack DataBinding 数据绑定 改变ui的几种方式

jetpack之databinding

jetpack之databinding