主要分为 BaseAdapter 和 ViewHolder 两部分
1 baseAdaper 部分
public abstract class BaseAdapter<T> extends RecyclerView.Adapter<ViewHolder>{
public Context mContext;
public List<T> mList;
public VideoBaseAdapter(Context mContext, List<T> list){
this.mContext=mContext;
this.mList=list;
}
@Override
public int getItemViewType(int position) {
if(getItemViewType(position,mList.get(position))!=0){
return getItemViewType(position,mList.get(position));
}
return super.getItemViewType(position);
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return ViewHolder.getViewHolder(mContext,parent,layoutId( parent,viewType));
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
myBindViewHolder( holder,mList,mList.get(position), position,holder.getAdapterPosition(),getItemViewType(position));
}
public void onNotifyDataSetChanged(List<T> list){
this.mList=list;
notifyDataSetChanged();
}
public VideoViewHolder getHolder(RecyclerView rv, int position){
return (ViewHolder) rv.findViewHolderForAdapterPosition( position); //得到要更新的item的view
}
public void addItem(int position,T t){
mList.add(position,t);
notifyItemInserted(position);
}
public void onItem(int pos){
notifyItemInserted(pos);
}
public void onDelitem(int position ){
mList.remove(position);
notifyDataSetChanged();
}
@Override
public int getItemCount() {
return mList.size();
}
protected abstract int layoutId(ViewGroup parent,int viewType);//布局
protected abstract int getItemViewType(int position, T t);//多种item
//相关逻辑
protected abstract void myBindViewHolder(VideoViewHolder holder,List<T> itemList,T itemData,int position,int adapterPosition,int itemViewType);
}
2 ViewHolder 部分
public class ViewHolder extends RecyclerView.ViewHolder{
private View mConvertView;
private Context mContext;
private SparseArray<View> mViews;
public ViewHolder(View itemView,Context context) {
super(itemView);
this.mContext = context;
this.mConvertView = itemView;
this.mViews = new SparseArray<>();
}
public static ViewHolder getViewHolder(Context context, ViewGroup parent, int layoutId){
View itemView = LayoutInflater.from(context).inflate(layoutId, parent, false);
ViewHolder holder = new ViewHolder( itemView, context);
return holder;
}
public <T extends View> T getView(int viewId){
View view = mViews.get(viewId);
if (view == null){
view = mConvertView.findViewById(viewId);
mViews.put(viewId, view);
}
return (T) view;
}
public ViewHolder setText(int viewId,String text){
if(text!=null){
TextView view = getView(viewId);
view.setText(text);
}
return this;
}
public ViewHolder setTextColor(int viewId,int colorId){
TextView view = getView(viewId);
view.setTextColor(mContext.getResources().getColor(colorId));
return this;
}
public ViewHolder setTextSize(int viewId,int size){
TextView view = getView(viewId);
view.setTextSize(size);
return this;
}
public ViewHolder setTextBackgroundResource(int viewId, int backgroundId){//设置背景图片
TextView view = getView(viewId);
view.setBackgroundResource(backgroundId);
return this;
}
public ViewHolder setImageResource(int viewId, int resId){
ImageView view = getView(viewId);
view.setImageResource(resId);
return this;
}
public ViewHolder setIamgeBackground(int viewId,String url){
ImageView view = getView(viewId);
// .placeholder(R.mipmap.def_loading_avatar).error(R.mipmap.def_loading_avatar)
Glide.with(view.getContext()).load(url).asBitmap().into(view);
return this;
}
public ViewHolder setIamgeBackground(ImageView view,String url){
Glide.with(view.getContext()).load(url).asBitmap().into(view);
return this;
}
/** 图片 高斯模糊
*/
public ViewHolder setIamgeBackground(int viewId,String url ,int s){
ImageView view = getView(viewId);
Glide.with(mContext).load(url)
.transform(new BlurTransformation(view.getContext(), s))
.crossFade()
.into(view);
return this;
}
public ViewHolder setGifBackground(int viewId,String url){
ImageView view = getView(viewId);
return this;
}
public ViewHolder setOnClickListener(int viewId, View.OnClickListener listener){
View view = getView(viewId);
view.setOnClickListener(listener);
return this;
}
public ViewHolder setVisibility(int viewId,int type){
View view = getView(viewId);
view.setVisibility(type);
return this;
}
public ViewHolder setTag(int id,boolean type){
getView(id).setTag(type);
return this;
}
public ViewHolder setVideoPlayer(int id,String url){
JCVideoPlayerStandard video_player =getView(id);
video_player.setUp(url, JCVideoPlayerStandard.SCREEN_LAYOUT_NORMAL, "");
return this;
}
public ViewHolder setAlpha(int id,int alpha){
View v = getView(id);
v.getBackground().mutate().setAlpha(alpha);
return this;
}
}
3最后是使用
public class MyAdapter extends BaseAdapter<ListBean> {//传入 list 集合的泛型
public MyAdapter(Context mContext, List<ListBean> list) {
super(mContext, list);
}
@Override
protected int layoutId(ViewGroup parent, int viewType) {
return R.layout.act_vrdetail;//布局id
}
@Override
protected int getItemViewType(int position, ListBean listBean) {
return 0;//如果不需要进行多种item 不需要修改
}
@Override
protected void myBindViewHolder(ViewHolder holder, List<ListBean> itemList, ListBean itemData, int position, int adapterPosition, int itemViewType) {
//设置数据 比如textview设置text
holder.setText(R.id.text,itemData.getString());
//(可以进行链式编程)
holder.setText(R.id.text,"nihao").setVisibility(R.id.dd, View.VISIBLE);
}
}