android -------- Data Binding的使用 ( 四 )ListView

世事洞明皆学问,人情练达即文章。这篇文章主要讲述android -------- Data Binding的使用 ( 四 )ListView相关的知识,希望能为你提供帮助。
今天来说说DataBinding在列表ListView中的使用
主要分为两种,1: 基本的实体类  2:Observable 定义字段
 
listView布局文件

< ?xml version="1.0" encoding="utf-8"?> < layout xmlns:android="http://schemas.android.com/apk/res/android"> < data> < /data> < LinearLayout android:layout_width="match_parent" android:layout_height="match_parent"> < ListView android:id="@+id/listview_demo7" android:layout_width="match_parent" android:layout_height="wrap_content" android:dividerHeight="5dp" android:divider="@color/colorAccent" > < /ListView> < /LinearLayout> < /layout>

主要看item布局
< ?xml version="1.0" encoding="utf-8"?> < layout xmlns:android="http://schemas.android.com/apk/res/android"> < data> < import type="com.zhangqie.databinding.demo7.UserBean" /> < variable name="user" type="UserBean" /> < import type="com.zhangqie.databinding.demo7.UserObservableBean" /> < variable name="userObservableBean" type="UserObservableBean" /> < /data> < LinearLayout android:layout_width="match_parent" android:layout_height="100dp" android:descendantFocusability="blocksDescendants" android:orientation="horizontal"> < LinearLayout android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center" android:orientation="vertical"> < TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{`编号:` + user.userId }" /> < TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:text="@{`姓名:` +user.userName}" /> < /LinearLayout> < LinearLayout android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center" android:orientation="vertical"> < TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{`年龄:` +user.userAge}" /> < !--表达式判断--> < TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:text="@{`性别:` + (user.userSex == 1f ? `男` : `女`)}" /> < /LinearLayout> < LinearLayout android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_marginRight="10dp" android:orientation="vertical"> < Button android:id="@+id/btn_update" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="修改数据" /> < Button android:id="@+id/btn_delete" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:text="删除数据" /> < /LinearLayout> < /LinearLayout> < /layout>

 
实体类就不给了,几个字段就行
来看看adapter
public class ListViewAdapter extends BaseAdapter {private Context context; private List< UserBean> list; private LayoutInflater layoutInflater; public ListViewAdapter(List< UserBean> list, Context context) { this.list = list; this.context = context; this.layoutInflater = LayoutInflater.from(context); }@Override public int getCount() { return list.size(); }@Override public Object getItem(int i) { return list.get(i); }@Override public long getItemId(int i) { return i; }@Override public View getView(int position, View convertView, ViewGroup parent) {Item7MvvmBinding item7MvvmBinding; if (convertView == null){ //创建一个databinding item7MvvmBinding = DataBindingUtil.inflate(layoutInflater, R.layout.item7_mvvm,parent,false); //获取convertView convertView = item7MvvmBinding.getRoot(); }else { ////去除convertView中bangding的dataBinding item7MvvmBinding = DataBindingUtil.getBinding(convertView); } UserBean userBean = list.get(position); //绑定数据,这里的BR.user根据item布局文件中的变量声明来决定 item7MvvmBinding.setVariable(com.zhangqie.databinding.BR.user,userBean); item7MvvmBinding.btnUpdate.setOnClickListener(new OnBtnClickListener(1, userBean)); item7MvvmBinding.btnDelete.setOnClickListener(new OnBtnClickListener(2, position)); return convertView; //也可以直接item7MvvmBinding.getRoot()也行 }public class OnBtnClickListener implements View.OnClickListener{private int stats; //1,修改;2,删除 private UserBean userBean; private int position; public OnBtnClickListener(int stats,UserBean userBean){ this.stats = stats; this.userBean = userBean; } public OnBtnClickListener(int stats, int position) { this.stats = stats; this.position = position; }@Override public void onClick(View view) { switch (stats){ case 1: userBean.setUserName("修改后的名字"); Toast.makeText(context,"1",Toast.LENGTH_LONG).show(); notifyDataSetChanged(); //刷新数据 break; case 2: list.remove(position); notifyDataSetChanged(); break; } } } }

 
activity中
public class Demo7 extends AppCompatActivity {Demo7Binding demo7Binding; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); demo7Binding = DataBindingUtil.setContentView(this, R.layout.demo7); initView(); }private void initView(){ ListViewAdapter listViewAdapter = new ListViewAdapter(initData(),this); //demo7Binding.listviewDemo7.setAdapter(listViewAdapter);
//这是第二种 ListViewObservableAdapter listViewObservableAdapter = new ListViewObservableAdapter(initObservableData(),this); demo7Binding.listviewDemo7.setAdapter(listViewObservableAdapter); listViewAdapter.notifyDataSetChanged(); }//初始化测试数据 private List< UserBean> initData() { List< UserBean> list = new ArrayList< > (); for (int i = 1; i < 16; i++) { UserBean userBean = new UserBean(); userBean.setUserId(i); userBean.setUserName("切切心语"+i); userBean.setUserAge(18 + i); userBean.setUserSex(i % 2 == 0 ? 1 : 0); list.add(userBean); } return list; }//初始化测试数据 private List< UserObservableBean> initObservableData() { List< UserObservableBean> list = new ArrayList< > (); for (int i = 1; i < 16; i++) { UserObservableBean userBean = new UserObservableBean(); userBean.userId.set(i); userBean.userName.set("切切心语"+i); userBean.userAge.set(18 + i); userBean.userSex.set(i % 2 == 0 ? 1 : 0); list.add(userBean); } return list; }}

 
上面adapter主要是第一种方式
 
第二种adapter如下:
public class ListViewObservableAdapter extends BaseAdapter {private Context context; private List< UserObservableBean> list; private LayoutInflater layoutInflater; public ListViewObservableAdapter(List< UserObservableBean> list, Context context) { this.list = list; this.context = context; this.layoutInflater = LayoutInflater.from(context); }@Override public int getCount() { return list.size(); }@Override public Object getItem(int i) { return list.get(i); }@Override public long getItemId(int i) { return i; }@Override public View getView(int position, View convertView, ViewGroup parent) {Item7MvvmBinding item7MvvmBinding; if (convertView == null) { //创建一个databinding item7MvvmBinding = DataBindingUtil.inflate(layoutInflater, R.layout.item7_mvvm, parent, false); //获取convertView convertView = item7MvvmBinding.getRoot(); } else { ////去除convertView中bangding的dataBinding item7MvvmBinding = DataBindingUtil.getBinding(convertView); } UserObservableBean userBean = list.get(position); //绑定数据,这里的BR.user根据item布局文件中的变量声明来决定 item7MvvmBinding.setVariable(com.zhangqie.databinding.BR.userObservableBean, userBean); item7MvvmBinding.btnUpdate.setOnClickListener(new OnBtnClickListener(1, userBean)); item7MvvmBinding.btnDelete.setOnClickListener(new OnBtnClickListener(2, position)); return convertView; //也可以直接item7MvvmBinding.getRoot()也行 }public class OnBtnClickListener implements View.OnClickListener { private int stats; //1,修改;2,删除 private UserObservableBean userBean; private int position; public OnBtnClickListener(int stats, UserObservableBean userBean) { this.stats = stats; this.userBean = userBean; }public OnBtnClickListener(int stats, int position) { this.stats = stats; this.position = position; }@Override public void onClick(View view) { switch (stats) { case 1: userBean.userName.set("修改后的名字"); //自动更新数据 break; case 2: list.remove(position); notifyDataSetChanged(); break; } } } }

 
把前面讲的Observable 结合到ListView中来简单应用一些
 
效果如图:
               
android -------- Data Binding的使用 ( 四 )ListView

文章图片

【android -------- Data Binding的使用 ( 四 )ListView】 

    推荐阅读