您的位置:首页 > 其它

RecyclerView.Adapter封装,包括点击监听,长按监听,继承时不需要重新设置

2017-08-10 15:00 387 查看
自己封装个RecyclerView.Adapter,自己的才是最好的,恩,直接上代码:

1.首先是RecyclerView的ViewHolder:

import android.support.v7.widget.RecyclerView.ViewHolder;
import android.view.View;

/**
* RecyclerView.ViewHolder万能
* Created by ruin
*/
public abstract class BaseViewHolder extends ViewHolder {
public View itemView;

public BaseViewHolder(View view) {
super(view);
itemView = view;
}
}


大家发现我在封装这个的时候加了个itemView,别困惑~别着急~后面会解释干什么用的~

2.然后我们来封装Adapter

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import java.util.LinkedList;
import java.util.List;

/**
* RecyclerAdapter 封装类
* Created by ruin
*/
public abstract class BaseRecyclerAdapter<T> extends RecyclerView.Adapter<BaseViewHolder> {
protected Context context;
protected LayoutInflater inflater;
protected List<T> mDatas = new LinkedList<T>();
public OnItemClickListener<T> onItemClickListener;
public OnItemLongClickListener<T> onItemLongClickListener;

public BaseRecyclerAdapter(Context context) {
this.context = context;
inflater = LayoutInflater.from(context);
}

@Override
public int getItemCount() {
return mDatas == null ? 0 : mDatas.size();
}

public T getItem(int position) {

return mDatas.get(position);
}

public void addAll(List<T> datas) {
mDatas.addAll(datas);
notifyDataSetChanged();
}

public void addItemTop(List<T> datas) {
mDatas = datas;
}

public void remove(int position) {
mDatas.remove(position);
notifyDataSetChanged();
}

public void clear() {
mDatas.clear();
notifyDataSetChanged();
}

@Override
public long getItemId(int position) {
return position;
}

public List<T> getDatas() {
return mDatas;
}

@Override
public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return getHolder(parent, viewType);
}

@Override
public void onBindViewHolder(BaseViewHolder holder, final int position) {
//还记得么~上面的itemView~用在这里啦
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (onItemClickListener != null) {
onItemClickListener.onItemClick(v, position, getItem(position));
}
}
});
holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
if (onItemLongClickListener != null) {
onItemLongClickListener.onItemLongClick(v, position, getItem(position));
return true;
}
return false;
}
});
setDate(holder, position);
}

//继承类的时候只需要重写这个方法,做以前在onBindViewHolder方法里的事情就可以了
protected abstract void setDate(BaseViewHolder holder, int position);

//做onCreateViewHolder的事情
protected abstract BaseViewHolder getHolder(ViewGroup parent, int viewType);

// 点击事件接口
public interface OnItemClickListener<T> {
void onItemClick(View view, int position, T model);
}

// 长按事件接口
public interface OnItemLongClickListener<T> {
void onItemLongClick(View view, int position, T model);
}

public void setOnItemClickListener(OnItemClickListener<T> onItemClickListener) {
this.onItemClickListener = onItemClickListener;
}

public void setOnItemLongClickListener(OnItemLongClickListener<T> onItemLongClickListener) {
this.onItemLongClickListener = onItemLongClickListener;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: