主要分为 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); } }
