Android databinding RecycleView item 子控件点击事件
2017-03-13 17:21
891 查看
记录使用databinding遇到的小问题。
前面先介绍一下简单用法,在引出问题。
首先recyclerview中会用到ViewHolder,下面列出一个通用bindViewholder:
使用时呢,首先在声明类的时候:
然后onCreateViewHolder方法中
最后就是onBindViewHolder方法了,其他的和正常的adapter写法没有什么差别了。
问题一:现在列表中,每一行item中有一个按钮需要点击事件,区别于item的点击。
找了半天最后还是老方法,先获得总布局,在findViewById即可:
问题二:在xml中根据数据对象来决定这个按钮是显示还是隐藏。
网上搜出来大部分都是:
问题三:图片加载。
声明一个类:
在布局imageview直接使用:
注:1.编译的时候会报错但是可以运行,不要害怕。
2.注解名字一定不要弄错,就是(bind:)。一开始用的时候有的人写的资料不是bind,照着写了一下,一直运行错误,浪费了好长时间。
前面先介绍一下简单用法,在引出问题。
首先recyclerview中会用到ViewHolder,下面列出一个通用bindViewholder:
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; } }
使用时呢,首先在声明类的时候:
public class MyBindAdapter extends RecyclerView.Adapter<BindingViewHolder>
然后onCreateViewHolder方法中
@Override public BindingViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { ViewDataBinding binding; binding = DataBindingUtil.inflate(mLayoutInflater, R.layout.adapter_my_bind, parent, false); return new BindingViewHolder(binding); }
最后就是onBindViewHolder方法了,其他的和正常的adapter写法没有什么差别了。
// 数据 final MyBabyEntity.ResultsBean bean = list.get(position); // 设置数据 holder.getBinding().setVariable(BR.babyEntity, bean); // 刷新 holder.getBinding().executePendingBindings(); // item点击 holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (mListener != null){ mListener.backItemBean(bean, lastPosition, position); } } });
问题一:现在列表中,每一行item中有一个按钮需要点击事件,区别于item的点击。
找了半天最后还是老方法,先获得总布局,在findViewById即可:
// 按钮点击 holder.getBinding().getRoot().findViewById(R.id.btn_edit).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // todo } });
问题二:在xml中根据数据对象来决定这个按钮是显示还是隐藏。
网上搜出来大部分都是:
android:visibility="@{babyEntity.isSelected ? View.VISIBLE : View.GONE}"直接复制过来,发现运行报错。检查半天才想起来。这句话中使用了View相关的API。所以要在<data>中引入View包。即:
<data> <variable name="babyEntity" type="com.ruilai.ge.app.bean.MyBabyEntity.ResultsBean"/> <import type="android.view.View"/> </data>
问题三:图片加载。
声明一个类:
public class ImageLoadViewModel { /** * 头像加载 * @param view 要加载的view * @param imageUrl 头像路径 */ @BindingAdapter({"bind:babyHeadName"}) public static void loadImageFromUrl(ImageView view, String imageUrl){ Glide.with(view.getContext()).load(imageUrl) // 圆形图片 .bitmapTransform(new CropCircleTransformation(view.getContext())) .placeholder(R.mipmap.icon_head_img) .into(view); } }
在布局imageview直接使用:
app:babyHeadName="@{babyEntity.imageName}"
注:1.编译的时候会报错但是可以运行,不要害怕。
2.注解名字一定不要弄错,就是(bind:)。一开始用的时候有的人写的资料不是bind,照着写了一下,一直运行错误,浪费了好长时间。
相关文章推荐
- Android中RecyclerView的item中控件的点击事件添加删除一行、上移下移一行的代码实现
- Android-RecycleView的item点击事件
- Android中RecyclerView的item中控件的点击事件添加删除一行、上移下移一行的代码实现
- RecycleView的通用适配器BaseQuickAdapter处理item中子控件的点击事件以及cardview卡片阴影
- [Android | Material Design] RecyclerView Item点击事件 添加水波纹效果 两种办法
- 我的Android进阶之旅------>Android中ListView中嵌套(ListView)控件时item的点击事件不起作的问题解决方法
- Android RecyclerView使用(二) -给Item添加点击事件
- android listview的item里面的imageview的点击事件
- Android中RecyclerView点击Item设置事件
- Android 高级UI设计笔记20:RecyclerView 的详解之RecyclerView添加Item点击事件
- Android-RecyclerView-Item点击事件设置
- Android-ListView所包含的item里面的控件点击事件
- Android ViewPager与子控件点击事件冲突的解决方案
- android 控件 recyvlerView添加item点击事件
- Android ListView的Item点击事件和Item里控件点击事件冲突问题解决
- Android中Spinner控件关于二次点击同一item无响应事件解析及处理方法
- Android RecycleView(三)——增加点击事件
- 【Android 界面效果48】Android-RecyclerView-Item点击事件设置
- Android 隐藏ViewPager之后,控件点击事件无法响应的问题
- Android中ListView(gridview)的item中有button等子点击控件时不能响应点击事件的原因