Simple use of recyclerview and adapter tool case

After working on python for a year and a half, I found a lot of changes, and I forgot a lot. Use it as a record for easy use in the future.

Stop talking nonsense and start doing it.

This description applies to the latest version, andorid4.1.1.

First add dependency in build.gradle: (not the latest one, I currently use it)

implementation 'androidx.recyclerview:recyclerview:1.1.0'

Then write BaesAdapter: (personal writing, only for my own convenience, modify according to personal use)

public abstract class BaseAdapter<D>  extends RecyclerView.Adapter{
    protected List<D> mDatas;
    
    private OnItemClickListener onItemClickListener;
    private OnItemLongClickListener onItemLongClickListener;

    public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
        this.onItemClickListener = onItemClickListener;
    }
    public void setOnItemLongClickListener(OnItemLongClickListener onItemLongClickListener){
        this.onItemLongClickListener = onItemLongClickListener;
    }
    public BaseAdapter(List<D> datas) {
        if (mDatas == null) {
            mDatas = new ArrayList<>();
        }
        mDatas = datas;
    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return BaseViewHolder.get(parent, getResourceLayout());
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
        final D data = mDatas.get(position);
        BaseViewHolder baseViewHolder=(BaseViewHolder)holder;
        ((BaseViewHolder) holder).getItemView().setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (onItemClickListener != null) {
                    onItemClickListener.onItemClick(view, data, position);
                }
            }
        });
        ((BaseViewHolder) holder).getItemView().setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View view) {
                if (onItemLongClickListener != null) {
                    onItemLongClickListener.onItemLongClick(view, data, position);
                }
                return false;
            }
        });
        convert(baseViewHolder, data, position);
    }

    @Override
    public int getItemCount() {
        return mDatas.size();
    }

    public void addData(List<D> datas) {
        if (datas != null) {
            mDatas.addAll(datas);
        }
        notifyDataSetChanged();
    }

    public void setData(List<D> datas) {
        if (datas != null) {
            mDatas = datas;
        }
        notifyDataSetChanged();
    }

    public List<D> getDatas() {
        return mDatas;
    }

    public abstract void convert(BaseViewHolder holder, D data, int position);

    public abstract int getResourceLayout();

    protected static class BaseViewHolder extends RecyclerView.ViewHolder {
        private View mItemView;
        private SparseArray<View> mViews;
        private static Context mContext;

        public BaseViewHolder(View itemView) {
            super(itemView);
            this.mItemView = itemView;
            mViews = new SparseArray<>();
        }

        public static BaseViewHolder get(ViewGroup parent, int resourceId) {
            mContext = parent.getContext();
            View mItemView = LayoutInflater.from(parent.getContext()).inflate(resourceId, parent, false);
            return new BaseViewHolder(mItemView);
        }

        public View getItemView() {
            return mItemView;
        }

        public <T extends View> T getView(int id) {
            View view = mViews.get(id);
            if (view == null) {
                view = mItemView.findViewById(id);
                mViews.put(id, view);
            }
            return (T) view;
        }

        public void setText(int id, String value) {
            ((TextView) getView(id)).setText(value);
        }

        public void setTextColor(int id, int color){
            ((TextView) getView(id)).setTextColor(color);
        }

        public void setOnClickListener(int id, View.OnClickListener listener){
            if(listener == null){
                return;
            }
            getView(id).setOnClickListener(listener);
        }

        public void setImageSource(int id, int value) {
            ((ImageView) getView(id)).setImageResource(value);
        }

        public void setImageUrl(int id, String value) {
            Glide.with(mContext).load(value)
//                    .asBitmap()
//                    .error(R.mipmap.ic_launcher)
//                    .dontAnimate()//防止设置placeholder导致第一次不显示网络图片,只显示默认图片的问题  
//                    .placeholder(R.mipmap.ic_launcher)
                    .into((ImageView) getView(id));
        }

        public void setImageUrl(int id, String value, int width, int height){
            Glide.with(mContext).load(value)
//                    .asBitmap()
//                    .override(width, height)
//                    .error(R.mipmap.ic_launcher)
//                    .dontAnimate()//防止设置placeholder导致第一次不显示网络图片,只显示默认图片的问题  
//                    .placeholder(R.mipmap.ic_launcher)
                    .into((ImageView) getView(id));
        }

        public void setRoundImage(int id, String value) {
            Glide.with(mContext).load(value)
//                    .asBitmap()
//                    .dontAnimate()//防止设置placeholder导致第一次不显示网络图片,只显示默认图片的问题  
//                    .error(R.mipmap.ic_launcher)
//                    .placeholder(R.mipmap.ic_launcher)
                    .into((ImageView) getView(id));
        }

        public void setPhotoRoundImage(int id, String value) {
            Glide.with(mContext).load(value)
//                    .asBitmap()
//                    .error(R.mipmap.ic_launcher)
//                    .dontAnimate()//防止设置placeholder导致第一次不显示网络图片,只显示默认图片的问题  
                    .into((ImageView) getView(id));
        }
    }

    public interface OnItemClickListener<D> {
        void onItemClick(View view, D data, int position);
    }
    public interface OnItemLongClickListener<D>{
        void onItemLongClick(View view, D data, int position);
    }
}

To load the image, use Glide to continue build.gradle to add dependencies, but the latest one is not used:

implementation 'com.github.bumptech.glide:glide:4.11.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'

Load and use directly in actual combat:

public class PageActivityAdapter extends BaseAdapter<Bean> {
    private Context context;
    public PageActivityAdapter(List<Bean> datas, Context context) {
        super(datas);
        this.context = context;
    }
    @Override
    public void convert(BaseViewHolder holder, Bean data, int position) {
        //设置控件
        holder.setText(R.id.控件的id名字,data);
        //item的点击事件,(还有长按方法一样调用)
        setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(View view, Object data, int position) {
                if(position==0){
                    Intent instant1 = new Intent(context, Shipment.class);
                    context.startActivity(instant1);
                }else if(position==1){
                    Intent instant1 = new Intent(context, ShipUnloading.class);
                    context.startActivity(instant1);
                }
            }
        });
    }

    @Override
    public int getResourceLayout() {
        return R.layout.自己的自定义布局;
    }
}

Then write in the activity or the used page:

//创建适配器对象
PageActivityAdapter pageActivityAdapter = new PageActivityAdapter(namelist,this);
//创建布局样式 我这里用的是表格布局,看自己需求(线性瀑布流等。)
GridLayoutManager linearLayoutManager = new GridLayoutManager(this,3);
//设置布局样式
pageList.setLayoutManager(linearLayoutManager);
//设置适配器
pageList.setAdapter(pageActivityAdapter);

Okay, this time I’m here, and I hope that the original will be helpful to everyone.

Guess you like

Origin blog.csdn.net/q992767879/article/details/112798700