RecyclerView适配器基类的封装
RecyclerView.Adapter封装类
public abstract class AutoRollAdapter<T> extends RecyclerView.Adapter<ViewHolder> {
protected List<T> ts = new ArrayList<>();
public List<T> getData() {
return ts;
}
public int size() {
return null == ts ? 0 : ts.size();
}
public void add(T t) {
ts.add(t);
notifyDataSetChanged();
}
protected void remove(int index) {
ts.remove(index);
notifyDataSetChanged();
}
public void addAll(List<T> ts) {
this.ts.addAll(ts);
notifyDataSetChanged();
}
public void clear() {
this.ts.clear();
notifyDataSetChanged();
}
@LayoutRes
public abstract int getLayoutResId();
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new ViewHolder(parent, getLayoutResId());
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
if (size() > 0) {
onConvert(holder, getItem(position));
// onConvert(holder, getItem(position), position);
}
}
protected abstract void onConvert(ViewHolder holder, T bean);
//返回条目索引,根据自己需求设置返回参数
protected abstract void onConvert(ViewHolder holder, T bean, int position);
public T getItem(int position) {
return ts.get(position % size());
}
}
ViewHolder封装
public class ViewHolder extends RecyclerView.ViewHolder {
private SparseArray<View> viewArray;
public ViewHolder(ViewGroup parent, @LayoutRes int resId) {
super(LayoutInflater.from(parent.getContext()).inflate(resId, parent, false));
viewArray = new SparseArray<>();
}
public <T extends View> T findViewById(@IdRes int resId) {
View view = viewArray.get(resId);
if(view == null) {
view = itemView.findViewById(resId);
viewArray.put(resId, view);
}
return (T) view;
}
public ViewHolder setText(@IdRes int resId, CharSequence text) {
TextView tv = findViewById(resId);
if(tv != null) {
tv.setText(text);
}
return this;
}
public ViewHolder setTextColor(@IdRes int resId, int color) {
TextView tv = findViewById(resId);
if(tv != null) {
tv.setTextColor(color);
}
return this;
}
public ViewHolder setOnClickListener(int viewId, View.OnClickListener onClickListener) {
View view = findViewById(viewId);
view.setOnClickListener(onClickListener);
return this;
}
}
ViewHolder进行了封装目前之封装了setText、setTextColor以及setOnClickListener,可以根据自己的需求进行添加
使用封装的基类
public class CallAdapter extends AutoRollAdapter<CallBean> {
//设置布局-
@Override
public int getLayoutResId() {
return R.layout.listview_item_call;
}
//设置控件属性
@Override
protected void onConvert(ViewHolder holder, CallBean bean) {
holder.setText(R.id.tv_window, bean.getWindowName())
.setTextColor(R.id.tv_window, bean.getStateColor());
}
}