Android官方DataBinding(三):RecyclerView 使用ViewDataBinding更新数据
本例基于Android官方DataBinding,在RecyclerView上实现一个简单需求:点击一个button按钮,增加一个数据元素,并更新的view上。

(1)首先写一个布局,这个布局上面放一个按钮button,下面一个标准Android RecyclerView。Button按钮的实现一个简单的功能:没点击一次就增加一个数据元素,然后更新到RecyclerView。recycler_view_layout.xml:

<?xml version="1.0" encoding="utf-8"?>    


(2)和附录文章1,2,写数据模型User,对比这个User和附录1,2的User建模时候的异同,User.java:
package zhangphil.test;import android.databinding.BaseObservable;//import android.databinding.Bindable;/** * Created by Phil on 2017/8/17. */public class User extends BaseObservable {    private String id;    private String name;    private String blog;    public void setId(String id) {        this.id = id;        //notifyPropertyChanged(BR.id);    }    //@Bindable    public String getId() {        return this.id;    }    public void setName(String name) {        this.name = name;        //notifyPropertyChanged(BR.name);    }    //@Bindable    public String getName() {        return this.name;    }    public void setBlog(String blog) {        this.blog = blog;        //notifyPropertyChanged(BR.blog);    }    //@Bindable    public String getBlog() {        return this.blog;    }}


(3)因为是一个RecyclerView,RecyclerView需要Adapter,在Adapter中需要一个布局layout,为User的数据找到View,Adapter需要的子view布局这里将写View和Model的绑定代码,item.xml:
<?xml version="1.0" encoding="utf-8"?>                                                        


(4)上层Java代码,注意观察ViewHolder的写法。比较关键的是在创建ViewHolder时候传入的ViewDataBinding。在Adapter的onBindViewHolder里面,仅需两行代码就实现数据模型和View的绑定,MainActivity.java:
package zhangphil.test;import android.databinding.DataBindingUtil;import android.databinding.ViewDataBinding;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import java.util.ArrayList;import static zhangphil.test.BR.user;public class MainActivity extends AppCompatActivity {    private int index = 0;    private ItemAdapter mItemAdapter;    private ArrayList mItems;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.recycler_view_layout);        mItems = new ArrayList();        for (int i = 0; i < 1; i++) {            User u = new User();            u.setId(index + "");            u.setName("zhangphil @" + index);            u.setBlog("blog.csdn.net/zhangphil @" + index);            mItems.add(u);            index++;        }        RecyclerView mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);        mRecyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));        mItemAdapter = new ItemAdapter();        mRecyclerView.setAdapter(mItemAdapter);        findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                User u = new User();                u.setId(index + "");                u.setName("zhangphil @" + index);                u.setBlog("blog.csdn.net/zhangphil @" + index);                mItems.add(u);                mItemAdapter.notifyDataSetChanged();                index++;            }        });    }    private class ItemAdapter extends RecyclerView.Adapter {        @Override        public ItemViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {            ViewDataBinding binding = DataBindingUtil.inflate(LayoutInflater.from(viewGroup.getContext()), R.layout.item, viewGroup, false);            ItemViewHolder holder = new ItemViewHolder(binding);            return holder;        }        @Override        public void onBindViewHolder(ItemViewHolder viewHolder, int i) {            viewHolder.getBinding().setVariable(user, mItems.get(i));            viewHolder.getBinding().executePendingBindings();        }        @Override        public int getItemCount() {            return mItems.size();        }    }    private class ItemViewHolder extends RecyclerView.ViewHolder {        private ViewDataBinding binding;        public ItemViewHolder(ViewDataBinding binding) {            super(binding.getRoot());            this.binding = binding;        }        public void setBinding(ViewDataBinding binding) {            this.binding = binding;        }        public ViewDataBinding getBinding() {            return this.binding;        }    }}


代码运行结果,每点击一次button,数据增加一个,更新:

Android官方DataBinding(三):RecyclerView 使用ViewDataBinding更新数据_第1张图片



附录:
1,《Android官方DataBinding简例(一)》链接:http://blog.csdn.net/zhangphil/article/details/77322530  
2,《Android官方DataBinding(二):动态数据更新notifyPropertyChanged》链接:http://blog.csdn.net/zhangphil/article/details/77328688 

更多相关文章

  1. Android Xml文件生成,Xml数据格式写入
  2. [置顶] Android官方文档系列(翻译)
  3. Android大数据、断点续传、耗时下载之DownloadManager开发简介(1
  4. android UI设计,android ui开发,android 页面设计,android页面布
  5. 安卓表格布局android:collapseColumns,android:shrinkColumns和s
  6. android 布局中 layout_gravity、gravity、orientation、layout_

随机推荐

  1. Android工程师成长路线全攻略
  2. 《Qt on Android核心编程》相关资源
  3. Android 调用系统相机以及相册源码
  4. 在android 中利用button 按钮设置监听事
  5. 一个Android开发者自学Python的心路历程
  6. Android(安卓)学习笔记 -- 环境搭建
  7. Android(安卓)adb.exe程序启动不起来 具
  8. activity状态的保存和保持(onRetainNonCo
  9. 解读2015之Android篇:横向扩张、平稳发展
  10. Android 自定义AlertDialog提交表单