您的位置:首页 > 其它

RecyclerView适配器的简单封装-BaseAdapter

2018-01-25 11:14 417 查看
package com.beini.adapter;

import android.support.annotation.IdRes;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

import com.beini.bean.BaseBean;
import com.facebook.drawee.view.SimpleDraweeView;

import java.util.List;

/**
* Created by beini on 2017/2/18.
*/

public abstract class BaseAdapter<T> extends RecyclerView.Adapter<BaseAdapter.ViewHolder> implements View.OnClickListener, View.OnLongClickListener {

private List<T> baseList;
private int layoutId;

public BaseAdapter(@NonNull BaseBean<T> baseBean) {
this.baseList = baseBean.getBaseList();
this.layoutId = baseBean.getId();
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(layoutId, parent, false);
ViewHolder holder = new ViewHolder(view);
view.setOnClickListener(this);
view.setOnLongClickListener(this);
return holder;
}

@Override
public int getItemCount() {
if (baseList == null || baseList.size() == 0) {
return 0;
}
return baseList.size();
}

protected class ViewHolder extends RecyclerView.ViewHolder {
View view;

ViewHolder(View view) {
super(view);
this.view = view;
}
}

public void addItem(T bean, int postion) {
baseList.add(postion, bean);
notifyItemInserted(postion);
notifyItemRangeChanged(postion, baseList.size());
}

public void removeItem(int postion) {
baseList.remove(postion);
notifyItemRemoved(postion);
notifyItemRangeChanged(postion, baseList.size());
}

protected TextView getTextView(@NonNull ViewHolder viewHolder, @IdRes int viewId) {
return (TextView) viewHolder.view.findViewById(viewId);
}

protected ImageView getImageView(@NonNull ViewHolder viewHolder, @IdRes int viewId) {
return (ImageView) viewHolder.view.findViewById(viewId);
}

protected Button getButton(@NonNull ViewHolder viewHolder, @IdRes int viewId) {
return (Button) viewHolder.view.findViewById(viewId);
}

protected SimpleDraweeView getSimpleDraweeView(@NonNull ViewHolder viewHolder, @IdRes int viewId) {
return (SimpleDraweeView) viewHolder.view.findViewById(viewId);
}

//item  click 事件
private OnItemClickListener itemClickListener = null;

public void setItemClick(OnItemClickListener itemClickListener) {
this.itemClickListener = itemClickListener;
}

@Override
public void onClick(View view) {
if (itemClickListener != null)
itemClickListener.onItemClick(view, (int) view.getTag());
}

public interface OnItemClickListener {
void onItemClick(View view, int position);
}

// item onlongClick 事件
private onItemLongClickListener itemLongClickListener = null;

public void setOnItemLongClickListener(onItemLongClickListener onItemLongClickListener) {
this.itemLongClickListener = onItemLongClickListener;
}

@Override
public boolean onLongClick(View v) {
if (itemLongClickListener != null)
itemLongClickListener.onItemLongClick(v, (int) v.getTag());
return true;
}

private interface onItemLongClickListener {
void onItemLongClick(View view, int position);
}
}


package com.beini.bean;

import android.support.annotation.LayoutRes;
import android.support.annotation.NonNull;

import java.util.List;

/**
* Created by beini on 2017/2/18.
*/

public class BaseBean<T> {
private int id;
private List<T> baseList;

public BaseBean(@LayoutRes int id, @NonNull List<T> baseList) {
this.id = id;
this.baseList = baseList;
}

public int getId() {
return id;
}

public void setId(@LayoutRes int id) {
this.id = id;
}

public List<T> getBaseList() {
return baseList;
}

public void setBaseList(@NonNull List<T> baseList) {
this.baseList = baseList;
}
}

使用:

package com.beini.adapter;

import android.support.v7.widget.RecyclerView;

import com.beini.R;
import com.beini.bean.BaseBean;

import java.util.List;

/**
* Created by beini on 2017/2/18.
*/

public class HomeListAdapter extends BaseAdapter {
private List<String> strings;

public HomeListAdapter(BaseBean<String> baseBean) {
super(baseBean);
this.strings = baseBean.getBaseList();
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
holder.itemView.setTag(position);
getTextView((ViewHolder) holder, R.id.text_home_list).setText(strings.get(position));
}
}

HomeListAdapter homeListAdapter = new HomeListAdapter(new BaseBean<>(R.layout.item_home, functionList));
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: