首先
创建一个实体类
为啥要实体类?因为你需要使用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));