Listview和Databinding实现数据绑定 (一)

在这里插入图片描述

首先 创建一个实体类

为啥要实体类?因为你需要使用Databinding,这个东西就需要实体类

public class ListviewItemTestDomain {
    private String text;

    public ListviewItemTestDomain(String text) {
        this.text = text;
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }
}

其次 创建list view 的item

记得也要<data>标签导入实体类

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

    <data>
        <variable
            name="listTest"
            type="com.primer.gaotest.mvp.control.domain.ListviewItemTestDomain" />
    </data>

        <TextView
            android:textColor="@color/black"
            android:id="@+id/list_view_adapter_test"
            android:layout_height="wrap_content">

        </TextView>

</layout>


接下来 主界面的list view布局

导入adapter

<data>
        <variable
            name="listviewTest"
            type="com.primer.gaotest.mvp.view.adapter.ListviewAdapterTest" />
        <variable
            name="mvpdTest"
            type="com.primer.gaotest.mvp.control.domain.MVPDdomain" />
    </data>

app:adapter有些是不补全的,直接写上去就是了

<ListView
           android:orientation="horizontal"
           app:adapter="@{listviewTest}"
           android:layout_marginTop="20dp"
           app:layout_constraintTop_toBottomOf="@id/quick_search"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           tools:ignore="MissingConstraints">

       </ListView>

再者创建一个普通的适配器

适配懂的吧?就是装载数据的,适配器的getview方法根据需要优化性能

注意点:

我卡了有点久,差点不耐烦了

binding.setVariable(BR.listTest, data.get(position));这句代码的BR.listTest,;参数一定要选对;
这个参数是啥呢?
是这个玩意,BR类时自动生成的,listTest是Databinding根据文件生成的,一一对应就好
在这里插入图片描述


public class ListviewAdapterTest extends BaseAdapter {

    private List<ListviewItemTestDomain> data;

    private Context context;

    public ListviewAdapterTest(List<ListviewItemTestDomain> data, Context context) {
        this.data = data;
        this.context = context;
    }

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

    @Override
    public Object getItem(int position) {
        return data.get(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewDataBinding binding;
        //ItemListBinding
        if (convertView == null) {
            binding = DataBindingUtil.inflate(LayoutInflater.from(context), R.layout.listview_adapter_test, parent, false);
            if (binding==null){
                L.e("空的binding");
            }
            convertView = binding.getRoot();
            convertView.setTag(binding);
        } else {
            binding = (ViewDataBinding) convertView.getTag();
        }

        binding.setVariable(BR.listTest, data.get(position));

        return binding.getRoot();

    }
}

最后 编写activity视图

测试的话,编写在oncreate方法就可以了

 List<ListviewItemTestDomain> data = new ArrayList<ListviewItemTestDomain>();
 data.add(new ListviewItemTestDomain("互粉啊,来呀"));
 data.add(new ListviewItemTestDomain("我是谁"));
 data.add(new ListviewItemTestDomain("我是老李"));
 binding.setListviewTest(new ListviewAdapterTest(data,this));
       
发布了89 篇原创文章 · 获赞 13 · 访问量 7699

猜你喜欢

转载自blog.csdn.net/printf123scanf/article/details/104146000