自定义BaseRecyclerAdapter适配器
自定义BaseRecyclerAdapter封装了几个常见的方法,能力有限,请各位见谅,废话不多说,直接上代码。
BaseRecyclerViewAdapter
代码块语法遵循标准markdown代码,例如:
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.List;
/**
* User : wy
* Date : 2016/10/27
*/
public abstract class BaseRecyclerViewAdapter<T> extends RecyclerView.Adapter<BaseRecyclerHolderView>{
protected Context mContext;
protected List<T> mList;
protected OnItemOnClickListener<T> itemOnClickListener;
public BaseRecyclerViewAdapter(Context mContext, List<T> mList){
this.mContext = mContext;
if(mList != null){
this.mList = mList;
}
}
@Override
public BaseRecyclerHolderView onCreateViewHolder(ViewGroup parent, int viewType) {
return showOnCreateViewHolder(parent,viewType);
}
@Override
public void onBindViewHolder(BaseRecyclerHolderView holder, int position) {
showOnBindViewHolder(holder,position);
}
@Override
public int getItemCount() {
return mList.size();
}
/**
* 添加一个集合
* @param data
*/
public void additemList(List<T> data){
mList.addAll(data);
notifyDataSetChanged();
}
/**
* 添加一个对象
* @param data
*/
public void addItemObject(T data){
mList.add(data);
notifyItemInserted(mList.size()-1);
}
/**
* 添加一个对象,插入位置
* @param postion
* @param data
*/
public void addItemObject(int postion,T data){
mList.add(postion,data);
notifyItemInserted(postion);
}
/**
* 根据下标删除
* @param postion
*/
public void removeItem(int postion){
mList.remove(postion);
notifyItemRemoved(postion);
}
/**
* 删除一个对象
* @param data
*/
public void removeItem(T data){
if(data != null){
mList.remove(data);
notifyDataSetChanged();
}
}
/**
* 删除所有数据
*/
public void remoceAll(){
mList.clear();
notifyDataSetChanged();
}
/**
* 修改数据中某一个条数据
* @param postion
* @param data
*/
public void updateItem(int postion,T data){
mList.set(postion,data);
notifyItemChanged(postion);
}
public void setOnItemClickListener(OnItemOnClickListener<T> itemListener){
this.itemOnClickListener = itemListener;
}
public interface OnItemOnClickListener<T>{
//点击item
void onItemClick(View view,int postion,T data);
//长按点击事件
void onLongItemClick(View view,int postion,T data);
}
protected abstract void showOnBindViewHolder(BaseRecyclerHolderView holder, int position);
protected abstract BaseRecyclerHolderView showOnCreateViewHolder(ViewGroup parent, int viewType);
}
BaseRecyclerHolderView
/**
* User : wy
* Date : 2016/10/27
*/
public abstract class BaseRecyclerHolderView extends RecyclerView.ViewHolder{
public BaseRecyclerHolderView(View itemView) {
super(itemView);
}
}
MyRecyclerViewAdapter
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.List;
/**
* User : wy
* Date : 2016/10/27
*/
public class MyRecyclerViewAdapter extends BaseRecyclerViewAdapter<String> {
public MyRecyclerViewAdapter(Context mContext, List<String> mList) {
super(mContext, mList);
}
@Override
protected void showOnBindViewHolder(BaseRecyclerHolderView holder, final int position) {
HolderView holderView = (HolderView) holder;
holderView.txtName.setText(mList.get(position));
holderView.txtName.setOnClickListener(new OnClicListener(position));
holderView.txtName.setOnLongClickListener(new OnLongClicListener(position));
}
@Override
protected BaseRecyclerHolderView showOnCreateViewHolder(ViewGroup parent, int viewType) {
View view = View.inflate(mContext,R.layout.item,null);
BaseRecyclerHolderView holderView = new HolderView(view);
return holderView;
}
/**
* 为了解决条码错乱的问题
*/
class OnClicListener implements View.OnClickListener{
int posion;
public OnClicListener(int pos){
this.posion = pos;
}
@Override
public void onClick(View v) {
itemOnClickListener.onItemClick(v,posion,mList.get(posion));
}
}
class OnLongClicListener implements View.OnLongClickListener{
int posion;
public OnLongClicListener(int pos){
this.posion = pos;
}
@Override
public boolean onLongClick(View v) {
itemOnClickListener.onItemClick(v,posion,mList.get(posion));
return false;
}
}
public class HolderView extends BaseRecyclerHolderView{
private TextView txtName;
public HolderView(View itemView) {
super(itemView);
txtName = (TextView) itemView.findViewById(R.id.item);
}
}
}
MainActivity
adapter.setOnItemClickListener(new BaseRecyclerViewAdapter.OnItemOnClickListener<String>() {
@Override
public void onItemClick(View view, int postion, String data) {
Toast.makeText(MainActivity.this,"点击:"+postion,Toast.LENGTH_LONG).show();
}
@Override
public void onLongItemClick(View view, int postion, String data) {
Toast.makeText(MainActivity.this,"长按:"+postion,Toast.LENGTH_LONG).show();
}
});