一步一步教你实现安卓mvvm架构,双向数据绑定(二)

上文讲了普通界面的双向数据绑定,本文讲一下recyclerview的双向数据绑定,整个工程只要写一个adapter就够了,不用像以前一个recyclerview写一个adapter了,节省了至少80%的代码,什么第三方库都不需要了。强大的工具!

 

1.   创建一个通用的adapter类,采用泛型来传入对应的model

public class ZLBindingAdapter<T> extends RecyclerView.Adapter<ZLBindingAdapter.BindingHolder> {
    private List<T> items ;
    private int variableId;
    private int layoutId;

    public ZLBindingAdapter(List<T> items, int variableId, int layoutId) {
        this.items = items;
        this.variableId = variableId;
        this.layoutId = layoutId;
    }

    @NonNull
    @Override
    public BindingHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
        ViewDataBinding binding = DataBindingUtil.inflate(LayoutInflater.from(viewGroup.getContext()), layoutId, viewGroup, false);
        return new BindingHolder(binding);
    }

    @Override
    public void onBindViewHolder(@NonNull BindingHolder bindingHolder, int i) {
        bindingHolder.bindData(items.get(i));
    }

    @Override
    public int getItemCount() {
        return items.size();
    }

    public class BindingHolder<T> extends RecyclerView.ViewHolder {
        ViewDataBinding binding;
        /**
         * @param binding   可以看作是这个hodler代表的布局的马甲,getRoot()方法会返回整个holder的最顶层的view
         * */
        public BindingHolder(ViewDataBinding binding) {
            super(binding.getRoot());
            this.binding = binding;
        }

        public void bindData(T item) {
            binding.setVariable(variableId ,item);
        }

    }
}

 

items就是我们的数据列表,这里我们是user的数据

variableId就是绑定的model对象,比如我们绑定user这个对象,variableId就是BR.user

layoutId是我们布局文件的id。

 

2. 然后我们的activity是这么写的。

recyclerView = findViewById(R.id.recyclerview);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
ZLBindingAdapter<User> bindingAdapter = new ZLBindingAdapter(users, BR.user, R.layout.item_belle);
recyclerView.setAdapter(bindingAdapter);
recyclerView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL));

 

3. 看效果:

 

强大吧,列表出来了。

我们要什么类型,只要对应的泛型传入即可,所有recyclerview通用一个adapter!!

 

本文代码:https://github.com/czl0325/MVVMTest-Android

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值