******************************BaseHolder*********************************
public class BaseHolder extends ViewHolder{
private View itemView;
private SparseArray<View> sa;
public BaseHolder(View itemView) {
super(itemView);
this.itemView = itemView;
sa = new SparseArray<>();
}
public <V extends View> V getView(int viewId) {
View view = sa.get(viewId);
if (null == view && null != itemView) {
view = itemView.findViewById(viewId);
sa.put(viewId, view);
}
return (V)view;
}
public BaseHolder setText(int viewId, String text) {
TextView view = getView(viewId);
view.setText(text);
return this;
}
public BaseHolder setImgResource(int viewId, int imgId) {
ImageView view = getView(viewId);
view.setImageResource(imgId);
return this;
}
public BaseHolder setImgBitmap(int viewId, Bitmap bitmap) {
ImageView view = getView(viewId);
view.setImageBitmap(bitmap);
return this;
}
}
*******************************BaseAdapter******************************
public abstract class BaseAdapter<T> extends RecyclerView.Adapter<BaseHolder> {
private Context context;
private int layoutId;
private List<T> data;
private View view;
private OnItemClick onItemClick;
protected BaseAdapter(Context context, int layoutId, List<T> data) {
this.context = context;
this.layoutId = layoutId;
this.data = data;
}
@Override
public int getItemCount() {
return data.size();
}
@Override
public BaseHolder onCreateViewHolder(ViewGroup parent, final int viewType) {
view = LayoutInflater.from(context).inflate(layoutId, parent, false);
return new BaseHolder(view);
}
@Override
public void onBindViewHolder(BaseHolder holder, final int position) {
bindViewHolder(holder, data.get(position), position);
****添加item的点击事件****
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (null != onItemClick) {
onItemClick.itemClick(position);
}
}
});
}
protected abstract void bindViewHolder(BaseHolder holder, T data, int position);
****设置item点击事件的接口****
public void setOnClick(OnItemClick onItemClick ) {
this.onItemClick = onItemClick;
}
public interface OnItemClick{
void itemClick(int postion);
}
}
*******************************封装完成,正常调用******************************
****集成封装好的adapter(感觉代码还是简化了很多的)****
public class PersonAdapter extends BaseAdapter<PersonEntity> {
private Context context;
public PersonAdapter(Context context, List<PersonEntity> date) {
super(context, R.layout.item_person, date);
this.context = context;
}
@Override
protected void bindViewHolder(BaseHolder holder, final PersonEntity date, int position) {
****初始化并设置参数****
holder.setText(R.id.name_tv, date.getName());
监听item上面的某个view的点击事件
holder.getView(R.id.name_tv).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context, ""+date.getName(), Toast.LENGTH_SHORT).show();
****这里也可以给外部提供一个回调接口,直接在外面处理点击某个view的业务逻辑****
}
});
}
}
****加载adapter****
PersonAdapter adapter = new PersonAdapter(PersonActivity.this, listEntity);
LinearLayoutManager llm = new LinearLayoutManager(personActivity.this, LinearLayoutManager.VERTICAL, false);
recyclerView.setLayoutManager(llm);
****给item添加分割线,SimpleDividerItemDecoration是自定义的分割线****
recyclerView.addItemDecoration(new SimpleDividerItemDecoration(PersonActivity.this));
recyclerView.setAdapter(adapter);
****item的点击事件****
adapter.setOnClick(new OnItemClick() {
@Override
public void itemClick(int postion) {
Toast.makeText(PersonActivity.this, "点击Item"+postion, Toast.LENGTH_SHORT).show();
}
});
******************RecyclerView.Adapter封装完毕*******************
************************欢迎指正错误和不足********************