Android Databinding 与 RecycleView mvvm的运用
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的运用相关推荐
- Android DataBinding 从入门到进阶
DataBinding 是谷歌官方发布的一个框架,顾名思义即为数据绑定,是 MVVM 模式在 Android 上的一种实现,用于降低布局和逻辑的耦合性,使代码逻辑更加清晰.MVVM 相对于 MVP,其 ...
- Android简易音乐重构MVVM Java版 -搭建项目(八)
Android简易音乐重构MVVM Java版 -搭建项目(八) 关于 新版本配置 网易云音乐api版本更新 重构代码 新建app类继承Application 项目结构 定义BaseActivity. ...
- 初步认识android databinding
我先说一下我公司的情况,然后再说对android databinding的认识 记得去年6月份,我们公司开发的项目(主要是针对餐饮的)走进了市场,遇到了一些问题.客户都说我们产品虽然有一定的好处,但不 ...
- Android DataBinding使用总结(五)结合MultiType展示多类型列表
前言 在我的前几篇文章中,简单学习了以下内容: Android DataBinding使用总结 (一) DataBinding的环境配置和基本使用 Android DataBinding使用总结(二) ...
- Android DataBinding之初体验
(一) 关于DataBinding Google推出DataBinding有一段时间,但是目前来看没有几个人用(尴尬),当然Google推出很多东西都没用户(哈哈),不过作为程序猿 学习这个东西还是很 ...
- 解决Android 编译出错 找不到android.databinding.ViewDataBinding的类文件
报错如下: 错误: 无法访问ViewDataBinding 找不到android.databinding.ViewDataBinding的类文件 有关详细信息, 请参阅以下堆栈跟踪. com.sun. ...
- Android Databinding学习
一.启用Databinding android { dataBinding { enabled = true } } 二.xml布局文件 <layout xmln ...
- Xamarin.Android和UWP之MVVM的简单使用(二)
0x01 前言 前面一篇,Xamarin.Android和UWP之MVVM的简单使用(一),主要讲了MvvmLight的简单使用 这篇主要讲讲MvvmCross的简单使用,例子的话,还是和上篇的一样. ...
- 使用Android DataBinding BindingAdapter和Dagger 2
使用Android 数据绑定库实现绑定适配器的典型方法是使用@BindingAdapter注释创建静态方法,例如: @BindingAdapter("android:imageUrl&quo ...
- Android DataBinding RecyclerView AAPT: error: attribute adapter (aka......) not found.
Android dataBinding为RecyclerView设置adapter时 出现AAPT: error: attribute adapter (aka......) not found. 出 ...
最新文章
- 如何充分利用JavaScript(ES6)中的解构功能
- dotConnect for Oracle入门指南(四):将数据插入表
- 【转载】在对话框中加入属性页
- 新的服务器装Ubuntu系统(如何在windows下制作启动盘以及如何安装Ubuntu系统)
- Openxml: 导出excel 设置 cell的格式
- linux telnet localhost 25,telnet localhost 25 没反应. 大家帮忙看下什么问题...
- linux常用网络命令
- Lie to me不错
- java 中j= i_java中 i = i++和 j = i++ 的区别
- springmvc+druid+dataSource配置的两种方式
- 告诉你三个实用的换性别特效软件
- 外链检测工具,反链友链检测工具
- 各种文件后缀名与打开方式大全
- PS去掉图片上的文字
- Java网络编程并实现一对一聊天室功能
- struts2+quartz定时任务
- Java 选择视频文件对话窗口
- awl多进程SYN攻击
- 安装WordPress的一些注意事项
- Emacs入门指南(1)