首先先得知RecyclerView.Adapter有什么方法,这样才知道与ListView的BaseAdapter有什么区别:
public class MyAdapter extends RecyclerView.Adapter {
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return null; // 返回创建一个ViewHolder
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
// 这里是刷新Item
}
@Override
public int getItemCount() {
return 0; // 有多少个Item
}
@Override
public int getItemViewType(int position) {
return super.getItemViewType(position); // 返回位置position,item的类型
}
@Override
public void registerAdapterDataObserver(RecyclerView.AdapterDataObserver observer) {
super.registerAdapterDataObserver(observer);
// 注册监听数据被刷新
}
@Override
public void unregisterAdapterDataObserver(RecyclerView.AdapterDataObserver observer) {
super.unregisterAdapterDataObserver(observer);
// 移除监听数据被刷新
}
}
为了处理onBindViewHolder和onBindViewHolder故定义二个抽象方法:
/**
* item布局ID
*
* @param viewType 类别
* @return item布局ID
*/
public abstract int getContentView(int viewType);
/**
* item刷新的回调
*
* @param holder ViewHolder
* @param object Item数据对象
* @param position 刷新的位置
*/
public abstract void onInitView(RecyclerHolder holder, T object, int position);
在开发中,Adapter的数据都用List来处理的,所以把RecyclerAdatper封装成泛形:
package com.recycler.lib;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.support.v4.content.ContextCompat;
import android.support.v7.widget.RecyclerView;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import java.util.ArrayList;
import java.util.List;
/**
* creater:cyy
* time:2017/2/8
* describe:定义{@link android.support.v7.widget.RecyclerView}OnItemClickListener万能适配器
*/
public abstract class RecyclerAdatper<T> extends RecyclerView.Adapter<RecyclerHolder> {
private Context mContext;
private List<T> mList;
private OnItemClickListener mOnItemClickListener;
public RecyclerAdatper(Context context) {
this(context, new ArrayList<T>());
}
public RecyclerAdatper(Context context, List<T> list) {
mContext = context;
mList = list;
}
public Context getContext() {
return mContext;
}
public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
this.mOnItemClickListener = onItemClickListener;
}
@Override
public RecyclerHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new RecyclerHolder(getLayoutInflater().inflate(getContentView(viewType), parent,
false));
}
@Override
public int getItemViewType(int position) {
return super.getItemViewType(position);
}
@Override
public void onBindViewHolder(final RecyclerHolder holder, final int position) {
onInitView(holder, getItem(position), position);
if (null != mOnItemClickListener) { // 实现item点击事件回调<