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

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


}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值