让偷懒更彻底——用Butterknife 来为recyclerview 打造通用适配器(上)

本文介绍了一种结合RecyclerView和Butterknife实现通用适配器的方法,通过自定义注解和抽象ViewHolder类,简化了数据绑定和事件监听的代码,使适配器的实现更加简洁。详细讲解了设计思路,包括ViewHolder的创建、数据绑定和事件监听的实现,以及如何利用Java注解获取布局ID。
摘要由CSDN通过智能技术生成
背景

随着recyclerview 的越来越普及,其高度的易用性,让我们越来越爱不释手,当然网上也出现了很多类似的通用适配器,让我们更加方便的使用它,今天我们这里介绍一种新的recyclerview的通用适配器的实现思路——把recyclerview和ButterKnife结合起来使用(ps:因为公司开发一直使用butterknife,才有了这种想法)。


首先贴上我的实现效果:

这里写图片描述

代码用法使用:
ModelRecyclerAdapter adapter = new ModelRecyclerAdapter(MyImageViewHolder.class, datas);
        recyclerView.setAdapter(adapter);

其中datas就是我们的数据,当然为了通用是泛型的,这边是传入的一个String的list,最关键的是我的MyViewHolder.class类了,他就是我们的核心点了,在这个类里面封装了我们所有数据展示和点击事件。
首先是item布局代码,我这边为了简单,就用了一个imageview,
在其中我用Picasso去加载了一张图片,然后给每个位置设置了点击效果展示当前position。
R.layout.item_list:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="120dp"
    android:layout_height="120dp"
    android:background="@android:color/black"
    android:paddingLeft="8dp"
    android:paddingTop="8dp">

    <ImageView
        android:id="@+id/iv_item1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@android:color/white"
        android:padding="12dp"
        android:scaleType="centerCrop" />


</LinearLayout>

我们绑定事件的viewholder类:

 /**
     * 我们的实际使用中的viewhoder
     * 用注释item的布局文件,在这个类的实现中,我们可以绑定点击事件,更新数据
     */
    @RecyclerItemViewId(R.layout.item_list)
    public static class MyViewHolder extends ModelRecyclerAdapter.ModelViewHolder<String> {
   
        @BindView(R.id.iv_item1)
        ImageView imageView;

        /**
         * 可以对itemview的任何一个view绑定监听,这里只是以onclick为例,当然也可以绑定onTouch,onLongClick等
         */
        @OnClick(R.id.iv_item1)
        void onclick() {
            Toast.makeText(imageView.getContext(), position + " 点击~", Toast.LENGTH_SHORT).show();
        }

        public int position;


        public MyViewHolder(View itemView) {
            super(itemView);
        }

        /**
         * 绑定我们的数据
         *
         * @param item    这是数据
         * @param adapter adapter 对象
         * @param context context对象
         * @param positon 当前位置
         */
        @Override
        public void convert(String item, ModelRecyclerAdapter adapter, Context context, int positon) {
            this.position = positon;
            Picasso.with(context).load(item).into(imageView);
        }
    }

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值