Android中RecyclerView的适配器的简单封装

来源:互联网 发布:vpn计费管理系统源码 编辑:程序博客网 时间:2024/06/09 17:03

看了鸿阳大神封装的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);            }        }    }}

原创粉丝点击