recyclerview的适配器封装

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

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值