package cn.flightfeather.thirdapp.adapter;
|
|
import android.content.Context;
|
import android.content.res.ColorStateList;
|
import android.graphics.Bitmap;
|
import android.graphics.drawable.Drawable;
|
import android.support.annotation.IdRes;
|
import android.support.annotation.NonNull;
|
import android.support.annotation.Nullable;
|
import android.support.annotation.StringRes;
|
import android.support.v7.widget.RecyclerView;
|
import android.util.SparseArray;
|
import android.util.TypedValue;
|
import android.view.LayoutInflater;
|
import android.view.View;
|
import android.view.ViewGroup;
|
import android.widget.CheckBox;
|
import android.widget.ImageView;
|
import android.widget.TextView;
|
|
import java.util.ArrayList;
|
import java.util.List;
|
|
/**
|
* @author riku
|
* <p>通用型recyclerview适配器,创建时通过完成回调函数bindView可直接实现简单的列表</p>
|
*/
|
|
public abstract class AllRecyclerViewAdapter<T> extends RecyclerView.Adapter<AllRecyclerViewAdapter.MyViewHolder> {
|
private List<T> mData;//显示数据
|
private int mLayoutRes;//页面布局
|
private Context context;
|
private List<Boolean> isSelectedlist;
|
|
protected AllRecyclerViewAdapter(List<T> mData, int mLayoutRes, Context context) {
|
super();
|
this.mData = mData;
|
this.mLayoutRes = mLayoutRes;
|
this.context = context;
|
this.isSelectedlist = new ArrayList<>();
|
if (mData != null) {
|
for (int i = 0; i < mData.size(); i++) {
|
isSelectedlist.add(false);
|
}
|
}
|
}
|
|
@NonNull
|
@Override
|
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
|
View view = LayoutInflater.from(context).inflate(mLayoutRes, parent, false);
|
return new MyViewHolder(view, context);
|
}
|
|
@Override
|
public void onBindViewHolder(@NonNull AllRecyclerViewAdapter.MyViewHolder holder, int position) {
|
if (mData == null) return;
|
if (isSelectedlist.size() != mData.size()) {
|
isSelectedlist.clear();
|
for (int i = 0; i<mData.size(); i++) {
|
isSelectedlist.add(false);
|
}
|
}
|
bindView(holder, mData.get(position), isSelectedlist.get(position), position);
|
}
|
|
@Override
|
public int getItemCount() {
|
return mData != null ? mData.size() : 0;
|
}
|
|
@Nullable
|
public T getItem(int position) {
|
return mData != null ? mData.get(position) : null;
|
}
|
|
public void setSelected(boolean bool, int position) {
|
isSelectedlist.set(position, bool);
|
}
|
|
public void setAllFalse() {
|
for (int i = 0; i<isSelectedlist.size(); i++) {
|
isSelectedlist.set(i, false);
|
}
|
}
|
|
public void setAllTrue() {
|
for (int i = 0; i<isSelectedlist.size(); i++) {
|
isSelectedlist.set(i, true);
|
}
|
}
|
|
public void removeDataAt(int pos) {
|
mData.remove(pos);
|
isSelectedlist.remove(pos);
|
}
|
|
/**
|
* 绑定回调函数
|
* @param holder 列表中单项的容器
|
* @param obj 数据列表的单个对象
|
* @param isSelected 是否被选中
|
* @param position 位置
|
*/
|
public abstract void bindView(AllRecyclerViewAdapter<T>.MyViewHolder holder, T obj, boolean isSelected, int position);//回调,自定义绑定的内容
|
|
public class MyViewHolder extends RecyclerView.ViewHolder {
|
|
private SparseArray<View> mViews; //存储ListView 的 item中的View
|
// private View item; //存放convertView
|
// private int position; //游标
|
private Context context; //Context上下文
|
|
public MyViewHolder(View itemView, Context context) {
|
super(itemView);
|
this.context = context;
|
mViews = new SparseArray<>();
|
}
|
|
@SuppressWarnings("unchecked")
|
private <T extends View> T getView(int id) {
|
T t = (T) mViews.get(id);
|
if (t == null) {
|
t = (T) itemView.findViewById(id);
|
mViews.put(id, t);
|
}
|
return t;
|
}
|
|
/**
|
* 设置文字
|
* @param id 控件id
|
* @param text 文本内容
|
* @return
|
*/
|
public MyViewHolder setText(@IdRes int id, CharSequence text) {
|
View view = getView(id);
|
if (view instanceof TextView){
|
((TextView) view).setText(text);
|
}
|
return this;
|
}
|
|
/**
|
* 获取view
|
* @param id
|
* @return
|
*/
|
public <K extends View> K getViewById(@IdRes int id) {
|
return getView(id);
|
}
|
|
/**
|
* 设置文字
|
* @param id 控件id
|
* @param res 文本内容
|
* @return
|
*/
|
public MyViewHolder setText(int id, @StringRes int res) {
|
View view = getView(id);
|
if (view instanceof TextView){
|
((TextView) view).setText(res);
|
}
|
return this;
|
}
|
|
/**
|
* 获取文字
|
* @param id 控件id
|
* @return
|
*/
|
public String getText(int id) {
|
View view = getView(id);
|
if (view instanceof TextView){
|
return ((TextView) view).getText().toString();
|
}
|
return "";
|
}
|
|
|
/**
|
* 设置文字颜色
|
* @param id 控件id
|
* @param color
|
* @return
|
*/
|
public MyViewHolder setTextColor(int id, int color){
|
View view = getView(id);
|
if (view instanceof TextView){
|
((TextView) view).setTextColor(color);
|
}
|
return this;
|
}
|
|
/**
|
* 设置文字大小
|
* @param id
|
* @param size
|
* @return
|
*/
|
public MyViewHolder setTextSize(int id, float size){
|
View view = getView(id);
|
if (view instanceof TextView){
|
((TextView) view).setTextSize(TypedValue.COMPLEX_UNIT_PT, size);
|
}
|
return this;
|
}
|
|
/**
|
* 设置图片
|
* @param id 控件id
|
* @param drawableRes 图片路径
|
* @return
|
*/
|
public MyViewHolder setImageResource(int id, int drawableRes) {
|
View view = getView(id);
|
if (view instanceof ImageView) {
|
((ImageView) view).setImageResource(drawableRes);
|
}
|
return this;
|
}
|
|
public MyViewHolder setImageDrawable(int id, Drawable drawable) {
|
View view = getView(id);
|
if (view instanceof ImageView) {
|
((ImageView) view).setImageDrawable(drawable);
|
}
|
return this;
|
}
|
|
public MyViewHolder setImageBitmap(@IdRes int id, Bitmap bitmap) {
|
View view = getView(id);
|
if (view instanceof ImageView) {
|
((ImageView) view).setImageBitmap(bitmap);
|
}
|
return this;
|
}
|
|
public MyViewHolder setBackgroudResource(int id, int drawableRes) {
|
View view = getView(id);
|
view.setBackgroundResource(drawableRes);
|
return this;
|
}
|
|
public MyViewHolder setBackgroudTint(int id, int color) {
|
View view = getView(id);
|
view.setBackgroundTintList(ColorStateList.valueOf(color));
|
return this;
|
}
|
|
public MyViewHolder setVisibility(int id, int vis) {
|
View view = getView(id);
|
view.setVisibility(vis);
|
return this;
|
}
|
|
public int getVisibility(int id) {
|
View view = getView(id);
|
return view.getVisibility();
|
}
|
|
/**
|
* 设置点击监听事件
|
* @param listener 监听事件
|
* @return
|
*/
|
public MyViewHolder setOnClickListener(int id, View.OnClickListener listener) {
|
getView(id).setOnClickListener(listener);
|
return this;
|
}
|
|
public MyViewHolder setOnItemClickListener(View.OnClickListener listener) {
|
this.itemView.setOnClickListener(listener);
|
return this;
|
}
|
|
/**
|
* 设置选中
|
* @param id
|
* @param selected
|
* @return
|
*/
|
public MyViewHolder setSelected(int id, boolean selected) {
|
View view = getView(id);
|
view.setSelected(selected);
|
return this;
|
}
|
|
/**
|
* 获取选中状态
|
* @param id
|
* @return
|
*/
|
public boolean isSelected(int id) {
|
View view = getView(id);
|
return view.isSelected();
|
}
|
|
/**
|
* 设置itemView是否选中
|
* @param selected
|
* @return
|
*/
|
public MyViewHolder setItemSelected(boolean selected) {
|
this.itemView.setSelected(selected);
|
return this;
|
}
|
|
/**
|
* 设置透明度
|
* @param id
|
* @param alpha
|
* @return
|
*/
|
public MyViewHolder setAlpha(@IdRes int id, float alpha) {
|
View view = getView(id);
|
view.setAlpha(alpha);
|
return this;
|
}
|
|
/**
|
* 设置能否点击
|
* @param id
|
* @param isEnabled
|
* @return
|
*/
|
public MyViewHolder setEnabled(int id, boolean isEnabled){
|
getView(id).setEnabled(isEnabled);
|
return this;
|
}
|
|
public MyViewHolder setChecked(int id, boolean checked) {
|
View view = getView(id);
|
if (view instanceof CheckBox) {
|
((CheckBox) view).setChecked(checked);
|
}
|
return this;
|
}
|
|
}
|
|
}
|