android MVVM开发框架——(3)DataBinding 应用于RecyclerView
来源:互联网 发布:java从入门到精通 编辑:程序博客网 时间:2024/06/08 16:12
android MVVM开发框架——(1)DataBinding 基础应用
android MVVM开发框架——(2)DataBinding 应用于ListView
如果你对mvvm或者databinding不太熟悉的,建议先去看看前两篇博文
1,item布局沿用上一篇listview的布局,这里就不贴出来了
2,recyclervice布局
<?xml version="1.0" encoding="utf-8"?><layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <data> <import type="com.lh.mvvm.adapter.RecyclerViewAdapter" /> <variable name="adapter" type="RecyclerViewAdapter" /> <!--这里可以让modle可以控制recyclerview的背景色--> <variable name="image" type="int" /> </data> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.v7.widget.RecyclerView android:id="@+id/recycler_test" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="0.1" android:background="@{image}" app:adapter="@{adapter}" /> </LinearLayout></layout>
3,RecyclerViewHolder
public class RecyclerViewHolder extends RecyclerView.ViewHolder { //这里只要给RecyclerView.ViewHolder返回一个view就可以,所以我们将构造方法中传入databinding ItemMvvmBinding itemMvvmBinding; public RecyclerViewHolder(ItemMvvmBinding itemMvvmBinding) { super(itemMvvmBinding.getRoot()); this.itemMvvmBinding = itemMvvmBinding; } public ItemMvvmBinding getBinding() { return itemMvvmBinding; } public void setBinding(ItemMvvmBinding itemMvvmBinding) { this.itemMvvmBinding = itemMvvmBinding; }}
4,RecyclerViewAdapter
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewHolder> implements View.OnClickListener { private List<UserBean> data; /** * 用于模仿listview的itemclick事件,recyclerview没有itemclick */ private OnItemClickListener mOnItemClickListener; public interface OnItemClickListener { void onItemClick(View view, int position); } public void setOnItemClickListener(OnItemClickListener listener) { this.mOnItemClickListener = listener; } public RecyclerViewAdapter(List<UserBean> data) { this.data = data; } @Override public RecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { ItemMvvmBinding itemMvvmBinding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.item_mvvm, parent, false); itemMvvmBinding.getRoot().setOnClickListener(this); return new RecyclerViewHolder(itemMvvmBinding); } @Override public void onBindViewHolder(RecyclerViewHolder holder, int position) { ItemMvvmBinding itemMvvmBinding = holder.getBinding(); UserBean userBean = data.get(position); itemMvvmBinding.setUser(userBean); //将position保存在itemView的Tag中,以便点击时进行获取 itemMvvmBinding.getRoot().setTag(position); itemMvvmBinding.btnUpdate.setOnClickListener(new OnBtnClickListener(1, userBean)); itemMvvmBinding.btnDelete.setOnClickListener(new OnBtnClickListener(2, position)); // 立刻执行绑定 itemMvvmBinding.executePendingBindings(); } private class OnBtnClickListener implements View.OnClickListener { private int stats;//1,修改;2,删除 private UserBean userBean; private int position; OnBtnClickListener(int stats, UserBean userBean) { this.stats = stats; this.userBean = userBean; } OnBtnClickListener(int stats, int position) { this.stats = stats; this.position = position; } @Override public void onClick(View v) { switch (stats) { case 1: userBean.userName.set("修改后的名字"); break; case 2: data.remove(position); notifyDataSetChanged(); break; } } } @Override public int getItemCount() { return data == null ? 0 : data.size(); } @Override public void onClick(View v) { if (mOnItemClickListener != null) mOnItemClickListener.onItemClick(v, (int) v.getTag()); }}
5,RecyclerViewActivity
public class RecyclerViewActivity extends Activity { ActivityRecyclerViewBinding recyclerViewBinding; ArrayList<UserBean> data; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); recyclerViewBinding = DataBindingUtil.setContentView(this, R.layout.activity_recycler_view); data = initData(); //需要设置recyclerview的layoutmanager,不然视图无法显示 //第二个参数表示水平布局,第三个参数表示是否反转,视图从下往上滑 //new GridLayoutManager(this,3,GridLayoutManager.HORIZONTAL,false)); //表格布局 //new LinearLayoutManager(recyclerView.getContext(), LinearLayoutManager.VERTICAL, true)); //new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL));//瀑布流 recyclerViewBinding.recyclerTest.setLayoutManager(new LinearLayoutManager(this, GridLayoutManager.VERTICAL, false)); //初始化适配器 RecyclerViewAdapter recyclerViewAdapter = new RecyclerViewAdapter(data); //绑定适配器 recyclerViewBinding.setAdapter(recyclerViewAdapter); //item的点击事件 recyclerViewAdapter.setOnItemClickListener(new RecyclerViewAdapter.OnItemClickListener() { @Override public void onItemClick(View view, int position) { Toast.makeText(RecyclerViewActivity.this, "行数:" + position, Toast.LENGTH_LONG).show(); } }); //通过属性设置view的背景色 recyclerViewBinding.setImage(getResources().getColor(R.color.colorAccent)); } //初始化测试数据 private ArrayList<UserBean> initData() { ArrayList<UserBean> list = new ArrayList<>(); for (int i = 0; i < 1000; i++) { UserBean userBean = new UserBean(); userBean.userId.set(i); userBean.userName.set(i + "aaa"); userBean.userAge.set(18 + i); userBean.userSex.set(i % 2 == 0 ? 1 : 0); list.add(userBean); } return list; }}
recyclerview与databinding之间的绑定就是这样
Demo下载
阅读全文
0 0
- android MVVM开发框架——(3)DataBinding 应用于RecyclerView
- android MVVM开发框架——(2)DataBinding 应用于ListView
- android MVVM开发框架——(1)DataBinding 基础应用
- android MVVM开发框架——(4)DataBinding绑定view自定义属性
- Android MVVM框架 DataBinding
- Android MVVM架构模式(二)——DataBinding框架(一)
- Android MVVM架构模式(二)——DataBinding框架(二)
- Android基础——框架模式MVVM之DataBinding的实践
- Android开发模式MVVM之DataBinding
- Android MVVM+DataBinding结合Dagger2进行开发
- 【Android】DataBinding库(MVVM设计模式)
- android MVVM DataBinding
- Android DataBinding && MVVM [U04]
- Android DataBinding & MVVM
- android MVVM DataBinding 数据绑定框架 注意问题
- android框架——MVVM
- Android之MVVM开发模式和DataBinding的简单用法
- android databinding RecyclerView / ListView
- 数据库笔记3————关系数据库标准语言SQL上(SQL的数据定义和数据更新)
- es6箭头函数
- linux中,一个目录的权限是777,普通用户为什么删除不了它呢?
- STM32CubeMX学习:基本定时器
- 3468 A Simple Problem with Integers
- android MVVM开发框架——(3)DataBinding 应用于RecyclerView
- 快速排序算法总结
- 【git 使用详解(4)】-- 初体验
- 【JZOJ5433】图
- eclipse git报错git The current branch is not configured for pull No value for key branch.master.merge
- HDOJ 1215 七夕节
- Linux中的自动安装脚本
- 2017-10-31每日一练
- 刷题——5.5