databinding 和RecycleView 需要Observable Binding双向绑定

public class SalesNewInfo extends BaseObservable {private String title;private Boolean isBegging;public String getTitle() {return title;}@Bindablepublic void setTitle(String title) {this.title = title;notifyPropertyChanged(BR.title);}public Boolean getBegging() {return isBegging;}@Bindablepublic void setBegging(Boolean begging) {isBegging = begging;notifyPropertyChanged(BR.begging);}

其中set的地方用到了@Bindable 和notifyPropertyChanged( )以便实现双向绑定
item layout中布局需要添加

    <data><variablename="item"type="com.ubtechinc.cruzr.easyhomeapp.model.SalesNewInfo" /></data>
然后根据数据的不同实现显示不同其中图片的显示方法代码如下
       <ImageViewandroid:id="@+id/imageView_banner"android:layout_width="175dp"android:layout_height="47dp"android:background="@{item.begging?       @drawable/item_sales_banner:@drawable/item_beginng_sales_banner}"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" />

然后是主要的adapter编写
自定义BindingViewHolder,并且继承RecyclerView.Adapter

private List<SalesNewInfo> mSaleNewsList;private final LayoutInflater mLayoutInflater;private OnItemClickListener mListener;public interface OnItemClickListener {/*** @time 2018/5/16  15:17* @describe 单个点击监听回调*/void onsalesNewsClick(SalesNewInfo salesNews);}public SalesNewsAdapter(Context context) {mLayoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);mSaleNewsList = new ArrayList<>();}@Overridepublic BindingViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {ViewDataBinding binding;binding = DataBindingUtil.inflate(mLayoutInflater,R.layout.item_sales_promotion, parent, false);return new BindingViewHolder(binding);}@Overridepublic void onBindViewHolder(BindingViewHolder holder, int position) {final SalesNewInfo salesNewInfo = mSaleNewsList.get(position);holder.getBinding().setVariable(BR.item, salesNewInfo);holder.getBinding().executePendingBindings();holder.itemView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (mListener != null) {mListener.onsalesNewsClick(salesNewInfo);}}});}@Overridepublic int getItemCount() {return mSaleNewsList.size();}public void addAll(List<SalesNewInfo> salesNews) {mSaleNewsList.addAll(salesNews);}public void add(SalesNewInfo salesNew) {mSaleNewsList.add(salesNew);notifyItemInserted(mSaleNewsList.size());}public void remove(int position) {mSaleNewsList.remove(position);notifyItemRemoved(position);}public void setListener(OnItemClickListener listener) {mListener = listener;}

BindingViewHolder代码如下

public class BindingViewHolder<T extends ViewDataBinding>extends RecyclerView.ViewHolder {private T mBinding;public BindingViewHolder(T binding) {super(binding.getRoot());mBinding = binding;}public T getBinding() {return mBinding;}
}

最后在activity中使用

mAdapter = new SalesNewsAdapter(this);GridLayoutManager mGridLayoutManager = new GridLayoutManager(this, 2);mBinding.recyclerView.setLayoutManager(mGridLayoutManager);mBinding.recyclerView.setAdapter(mAdapter);List<SalesNewInfo> mlist = new ArrayList<>();for (int i = 0; i < 30; i++) {SalesNewInfo info = new SalesNewInfo();info.setTitle("lala" + i);if (i < 4) {info.setBegging(true);} else {info.setBegging(false);}mlist.add(info);}mAdapter.addAll(mlist);mAdapter.setListener(new SalesNewsAdapter.OnItemClickListener() {@Overridepublic void onsalesNewsClick(SalesNewInfo salesNews) {SalesDetailInfoActivity.start(SalesPromotionActivity.this);Toast.makeText(SalesPromotionActivity.this, salesNews.getTitle(), Toast.LENGTH_LONG).show();}});

Android Databinding 与 RecycleView mvvm的运用相关推荐

  1. Android DataBinding 从入门到进阶

    DataBinding 是谷歌官方发布的一个框架,顾名思义即为数据绑定,是 MVVM 模式在 Android 上的一种实现,用于降低布局和逻辑的耦合性,使代码逻辑更加清晰.MVVM 相对于 MVP,其 ...

  2. Android简易音乐重构MVVM Java版 -搭建项目(八)

    Android简易音乐重构MVVM Java版 -搭建项目(八) 关于 新版本配置 网易云音乐api版本更新 重构代码 新建app类继承Application 项目结构 定义BaseActivity. ...

  3. 初步认识android databinding

    我先说一下我公司的情况,然后再说对android databinding的认识 记得去年6月份,我们公司开发的项目(主要是针对餐饮的)走进了市场,遇到了一些问题.客户都说我们产品虽然有一定的好处,但不 ...

  4. Android DataBinding使用总结(五)结合MultiType展示多类型列表

    前言 在我的前几篇文章中,简单学习了以下内容: Android DataBinding使用总结 (一) DataBinding的环境配置和基本使用 Android DataBinding使用总结(二) ...

  5. Android DataBinding之初体验

    (一) 关于DataBinding Google推出DataBinding有一段时间,但是目前来看没有几个人用(尴尬),当然Google推出很多东西都没用户(哈哈),不过作为程序猿 学习这个东西还是很 ...

  6. 解决Android 编译出错 找不到android.databinding.ViewDataBinding的类文件

    报错如下: 错误: 无法访问ViewDataBinding 找不到android.databinding.ViewDataBinding的类文件 有关详细信息, 请参阅以下堆栈跟踪. com.sun. ...

  7. Android Databinding学习

    一.启用Databinding android {     dataBinding {         enabled = true     } } 二.xml布局文件 <layout xmln ...

  8. Xamarin.Android和UWP之MVVM的简单使用(二)

    0x01 前言 前面一篇,Xamarin.Android和UWP之MVVM的简单使用(一),主要讲了MvvmLight的简单使用 这篇主要讲讲MvvmCross的简单使用,例子的话,还是和上篇的一样. ...

  9. 使用Android DataBinding BindingAdapter和Dagger 2

    使用Android 数据绑定库实现绑定适配器的典型方法是使用@BindingAdapter注释创建静态方法,例如: @BindingAdapter("android:imageUrl&quo ...

  10. Android DataBinding RecyclerView AAPT: error: attribute adapter (aka......) not found.

    Android dataBinding为RecyclerView设置adapter时 出现AAPT: error: attribute adapter (aka......) not found. 出 ...

最新文章

  1. 如何充分利用JavaScript(ES6)中的解构功能
  2. dotConnect for Oracle入门指南(四):将数据插入表
  3. 【转载】在对话框中加入属性页
  4. 新的服务器装Ubuntu系统(如何在windows下制作启动盘以及如何安装Ubuntu系统)
  5. Openxml: 导出excel 设置 cell的格式
  6. linux telnet localhost 25,telnet localhost 25 没反应. 大家帮忙看下什么问题...
  7. linux常用网络命令
  8. Lie to me不错
  9. java 中j= i_java中 i = i++和 j = i++ 的区别
  10. springmvc+druid+dataSource配置的两种方式
  11. 告诉你三个实用的换性别特效软件
  12. 外链检测工具,反链友链检测工具
  13. 各种文件后缀名与打开方式大全
  14. PS去掉图片上的文字
  15. Java网络编程并实现一对一聊天室功能
  16. struts2+quartz定时任务
  17. Java 选择视频文件对话窗口
  18. awl多进程SYN攻击
  19. 安装WordPress的一些注意事项
  20. Emacs入门指南(1)

热门文章

  1. 《黑客大曝光:移动应用安全揭秘及防护措施》一1.2 移动风险模型
  2. Springboot发送手机短信验证码并且校验
  3. 格拉姆矩阵(Gram Matrix)
  4. Anroid通过设置“自启动管理”让应用被杀死也能收到推送消息
  5. 图片去黑底原理(做个笔记)
  6. 关于公司备份软件选型
  7. 美国电话号码正则表达式
  8. npm切换到百度镜像源
  9. Ruby-学习之路1.1
  10. 微信小程序——打开地图 选择位置 完整功能实现代码(定位,检索周边,可移动选点,可搜索,腾讯地图API)