看了鸿阳大神封装的RecyclerView的适配器,自己就封装了一下适合自己的RecyclerView的适配器
首先是适配器的封装
public abstract class CommAdapter<T> extends RecyclerView.Adapter<ViewHolder> { private Context mContext; private List<T>data; private int layout_ID; private OnItemClickListener listener=null; private List<Integer> list_layout=null; private List<String> list_type=null; private int type_num=0; public CommAdapter(Context mContext,List<T> data,int layout_ID){ this.mContext=mContext; this.data=data; this.layout_ID=layout_ID; isMoreType=false; } /** * * @param mContext * @param data * @param list_layout 布局id * @param list_type 每个data数据中判断多样布局的类型,本人纯以数字来表示 从“0”开始 * @param type_num 多样布局的种类 */ public CommAdapter(Context mContext,List<T> data,List<Integer> list_layout,List<String> list_type,int type_num){ this.mContext=mContext; this.data=data; this.list_layout=list_layout; this.list_type=list_type; this.type_num=type_num; isMoreType=true; } /** * 判断是否是多样布局 */ private Boolean isMoreType=false; @Override public int getItemViewType(int position) { if(list_type==null) return super.getItemViewType(position); //多样布局返回的类型 for(int j=0;j<type_num;j++){ if(list_type.get(position).equals(""+j)){ return j; } } return 0; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { ViewHolder holder=null; if(isMoreType){ holder=new ViewHolder(mContext,LayoutInflater.from(mContext).inflate(list_layout.get(viewType),parent,false)); }else{ holder=new ViewHolder(mContext, LayoutInflater.from(mContext).inflate(layout_ID,parent,false)); } return holder; } @Override public void onBindViewHolder(ViewHolder holder, final int position) { if(isMoreType){ conver(holder,data.get(position),position,list_type.get(position)); }else{ conver(holder,data.get(position),position); } holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if(listener!=null){ listener.itemClick(position); } } }); holder.itemView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View view) { if(listener!=null){ listener.itemLongClick(position); } return true; } }); } @Override public int getItemCount() { return data.size(); } public void setOnItemClickListener(OnItemClickListener listener){ this.listener=listener; } public interface OnItemClickListener{ void itemClick(int position); void itemLongClick(int position); } protected abstract void conver(ViewHolder holder, T t, int position); protected abstract void conver(ViewHolder holder,T t,int position,String type); }
其次是ViewHole人的封装,拿了鸿阳大神的ViewHolder,嘿嘿.....
public class ViewHolder extends RecyclerView.ViewHolder { private Context mContext; private View mContentView; private SparseArray<View> sparseArray; public ViewHolder(Context context, View itemView) { super(itemView); mContext=context; mContentView=itemView; sparseArray=new SparseArray<View>(); } public <T extends View> T getView(int id){ View view=sparseArray.get(id); if(view==null){ view=(T)mContentView.findViewById(id); sparseArray.put(id,view); } return (T)view; } public View getContentView(){ return mContentView; } public ViewHolder setText(int id,String text){ TextView tv=getView(id); tv.setText(text); return this; } public ViewHolder setImageResourse(int id,int resourse){ ImageView iv=getView(id); iv.setImageResource(resourse); return this; } public ViewHolder setImageBitmap(int id,Bitmap bitmap){ ImageView iv=getView(id); iv.setImageBitmap(bitmap); return this; } public ViewHolder setVisible(int id,int visible){ View view=getView(id); view.setVisibility(visible); return this; } public ViewHolder setTextColor(int id,int color){ TextView tv=getView(id); tv.setTextColor(color); return this; } public ViewHolder setBackgroundColor(int id,int color){ View view=getView(id); view.setBackgroundColor(color); return this; } public ViewHolder setTextSize(int id,float size){ TextView tv=getView(id); tv.setTextSize(size); return this; } public ViewHolder setBackground(int id,Drawable background){ View view=getView(id); view.setBackground(background); return this; } public String getText(int id){ TextView tv=getView(id); return tv.getText().toString().trim(); } public void setOnClickListener(int id, final OnListener listener){ View view=getView(id); view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { listener.onListener(); } }); } public interface OnListener{ void onListener(); } }
下面是RecyclerView的分割线
public class RecyclerViewDivider extends RecyclerView.ItemDecoration{ private Paint mPaint; private Drawable mDivider; private int mDividerHeight=1; private int mOrientation; private static final int[] ATTRS=new int[]{android.R.attr.listDivider}; public RecyclerViewDivider(Context context,int orientation){ if(orientation!= LinearLayoutManager.VERTICAL&&orientation!=LinearLayoutManager.HORIZONTAL){ throw new IllegalArgumentException("请输入正确的参数"); } mOrientation=orientation; final TypedArray a=context.obtainStyledAttributes(ATTRS); mDivider=a.getDrawable(0); a.recycle(); } public RecyclerViewDivider(Context context,int orientation,int drawableId){ this(context,orientation); mDivider= ContextCompat.getDrawable(context,drawableId); mDividerHeight=mDivider.getIntrinsicHeight(); } public RecyclerViewDivider(Context context,int orientation,int dividerHeight,int dividerColor){ this(context,orientation); mDividerHeight=dividerHeight; mPaint=new Paint(Paint.ANTI_ALIAS_FLAG); mPaint.setColor(dividerColor); mPaint.setStyle(Paint.Style.FILL); } @Override public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { super.getItemOffsets(outRect, view, parent, state); outRect.set(0,0,0,mDividerHeight); } @Override public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) { if(mOrientation==LinearLayoutManager.VERTICAL){ drawVertical(c,parent); }else{ drawHorizontal(c,parent); } } private void drawHorizontal(Canvas canvas,RecyclerView parent){ final int left=parent.getPaddingLeft(); final int right=parent.getMeasuredWidth()-parent.getPaddingRight(); final int childSize=parent.getChildCount(); for(int i=0;i<childSize;i++){ final View child=parent.getChildAt(i); RecyclerView.LayoutParams layoutParams= (RecyclerView.LayoutParams) child.getLayoutParams(); final int top=child.getBottom()+layoutParams.bottomMargin; final int bottom=top+mDividerHeight; if(mDivider!=null){ mDivider.setBounds(left,top,right,bottom); mDivider.draw(canvas); } if(mPaint!=null){ canvas.drawRect(left,top,right,bottom,mPaint); } } } private void drawVertical(Canvas canvas,RecyclerView parent){ final int top=parent.getPaddingTop(); final int bottom=parent.getMeasuredHeight()-parent.getPaddingBottom(); final int childCount=parent.getChildCount(); for (int i = 0; i < childCount; i++) { final View childView=parent.getChildAt(i); RecyclerView.LayoutParams layoutParams= (RecyclerView.LayoutParams) childView.getLayoutParams(); final int left=childView.getRight()+layoutParams.rightMargin; final int right=left+mDividerHeight; if(mDivider!=null){ mDivider.setBounds(left,top,right,bottom); mDivider.draw(canvas); } if(mPaint!=null){ canvas.drawRect(left,top,right,bottom,mPaint); } } } }