背景
随着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);
}
}