我们写一个baseadapter代码,将recyclerview的公共部分抽离出来,然后提供接口
代码中使用了databinding
BaseAdapter.java
package com.yiba.oops.utils;
import android.content.Context;
import android.databinding.ViewDataBinding;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import com.yiba.oops.APP;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Administrator on 2016/9/1.
* READ ME
* 对recyclerview的adapter和viewholder进行抽取,主要包含binding和item的点击事件,需要其他的可以自己添加
*/
public abstract class BaseAdapter<T> extends RecyclerView.Adapter<BaseAdapter.BaseViewHolder> {
protected List<T> mList = new ArrayList<>();
protected Context mContext;
private OnRecyclerItemClickListener mOnRecyclerItemClickListener;
public interface OnRecyclerItemClickListener {
boolean onRecyclerItemClick(RecyclerView.ViewHolder holder, View view, int position);
}
public BaseAdapter(List<T> list) {
mContext = APP.getContext();
mList = list;
}
@Override
public BaseAdapter.BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
ViewDataBinding binding = getBinding(parent, viewType);
return new BaseViewHolder(binding);
}
/**
* 获取binding对象
*/
protected abstract ViewDataBinding getBinding(ViewGroup parent, int viewType);
@Override
public void onBindViewHolder(BaseAdapter.BaseViewHolder holder, int position) {
onBindingViewHolder(holder, position);
}
/**
* 绑定viewholder
**/
protected abstract void onBindingViewHolder(BaseAdapter.BaseViewHolder holder, int position);
@Override
public int getItemCount() {
return mList == null ? 0 : mList.size();
}
public void setOnRecyclerItemClickListener(OnRecyclerItemClickListener onRecyclerItemClickListener) {
mOnRecyclerItemClickListener = onRecyclerItemClickListener;
}
public class BaseViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private ViewDataBinding binding;
public BaseViewHolder(View itemView) {
super(itemView);
initListener();
}
public BaseViewHolder(ViewDataBinding binding) {
super(binding.getRoot());
this.binding = binding;
initListener();
}
private void initListener() {
itemView.setOnClickListener(this);
}
@Override
public void onClick(View view) {
if (mOnRecyclerItemClickListener != null) {
mOnRecyclerItemClickListener.onRecyclerItemClick(this, view, getAdapterPosition());
}
}
public ViewDataBinding getBinding() {
return binding;
}
}
}
使用:
例:
ShareAdapter.java
/**
* Created by ${xiaopao} on 2016/9/7.
*/
public class ShareAdapter extends BaseAdapter<ShareFriends> {
//BaseAdapter<ShareFriends>
//继承BaseAdapter,<ShareFriends>是item的对象
public ShareAdapter(List<ShareFriends> list) {
super(list);
}
@Override
protected ViewDataBinding getBinding(ViewGroup parent, int viewType) {
//这里返回databinding对象
return DataBindingUtil.inflate(
LayoutInflater.from(mContext),
R.layout.item_share_friends,
parent,
false
);
}
//这里进行item布局内容的设置
@Override
protected void onBindingViewHolder(BaseAdapter.BaseViewHolder holder, final int position) {
final ShareItemBinding sharebinding = (ShareItemBinding) holder.getBinding();
ShareFriends f = mList.get(position);
// LogUtil.HDLog("name:" + f.getName() + " icon: " + f.getIcon());
String iconurl = f.getIcon();
String name = f.getName();
sharebinding.shareName.setText(name);
Glide.with(mContext)
.load(iconurl)
.transform(new GlideCircleTransform(mActivity))
.placeholder(R.mipmap.ic_launcher)
.error(R.mipmap.ic_launcher)
.crossFade()
.into(sharebinding.shareImg);
if (mList.get(position).isChecked()) {
sharebinding.shareCheck.setImageResource(R.drawable.selected);
} else {
sharebinding.shareCheck.setImageResource(R.drawable.unseleted);
}
}
}
如果要增加点击事件:
//只需要设置setOnRecyclerItemClickListener即可。
adapter.setOnRecyclerItemClickListener(new BaseAdapter.OnRecyclerItemClickListener() {
@Override
public boolean onRecyclerItemClick(RecyclerView.ViewHolder holder, View view, int position) {
if (sharelist.get(position).isChecked()) {
sharelist.get(position).setChecked(false);
} else {
sharelist.get(position).setChecked(true);
}
adapter.notifyDataSetChanged();
return true;
}
});
BaseAdapter.java可以复制到工程里直接使用