记录使用databinding遇到的小问题。

前面先介绍一下简单用法,在引出问题。

首先recyclerview中会用到ViewHolder,下面列出一个通用bindViewholder:

public class BindingViewHolder 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 

然后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。所以要在中引入View包。即:

                    

问题三:图片加载。
声明一个类:

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,照着写了一下,一直运行错误,浪费了好长时间。







更多相关文章

  1. 菜鸟学Android开发系列之:发送短信拨打电话
  2. Android输入输出系统之TouchEvent流程
  3. Android长按弹出菜单
  4. 求 在独立service 中 调用contentprovider的方法
  5. Android打开摄像头拍照,并显示出来
  6. Android实现系统打印功能
  7. Android(安卓)中的BroadCastReceiver
  8. Android(安卓)- Handler is abstract, cannot be instantiated.
  9. Android(安卓)列表按照时间排序

随机推荐

  1. Android消息提示框和对话框的使用
  2. android盒子的usb和串口之间的通信
  3. 自定义android用户控件,使用回调函数实现
  4. android sqlite遇到的一个吐血的问题
  5. Android退出应用的方法总结
  6. Android开发之核心特性SearchView的开发
  7. android linux(centos6) gradle环境配置
  8. 正确认识android内存管理原理
  9. android studio的安装与环境配置
  10. [置顶] Android-x86入门之--让你的Androi