• 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中来简单应用一些

    效果如图:

                  

  • 相关阅读:
    Spring Boot中的测试
    从Spring迁移到Spring Boot
    在Spring Boot中配置web app
    自定义spring boot的自动配置
    Spring Boot @EnableAutoConfiguration和 @Configuration的区别
    Scala的Higher-Kinded类型
    Scala的存在类型
    Spring Boot注解
    Maven Wrapper简介
    spring boot 使用maven和fat jar/war运行应用程序的对比
  • 原文地址:https://www.cnblogs.com/zhangqie/p/9636755.html
Copyright © 2020-2023  润新知