实现一个列表只需一行代码-RecyclerView适配器暴力封装

本文介绍了一种简化Android列表适配器的封装方法,仅需几行代码即可完成列表功能,支持链式调用,极大提升了开发效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们平时要实现一个列表的功能。通常第一步要创建一个Adapter类,创建相应的ViewHolder类,然后实现各种回调方法,想想就比较繁琐。貌似做了好多重复的工作。今天就封装了下adapter。只需短短几行代码,就可以实现列表的功能。话不多说,直接上代码。可以直接去github上下载。如果你觉得实用,简单,欢迎评论反馈。支持一下。感谢。

BaseAdapter的关键代码:

 @Override
    public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(layoutResId, parent, false);
        return new BaseViewHolder(view);
    }

    @Override
    public void onBindViewHolder(BaseViewHolder holder, int position) {
        onBindViewHolder(holder, mData, position);
    }

这个类总共编写的代码就只有6行。

BaseViewHolder的关键代码:

/**
     * 根据资源id得到view
     * @param resId  控件id
     * @param <T>   view
     * @return   view
     */
    public <T extends View> T getView(int resId){
        View v =mViews.get(resId);
        if (v==null){
            v=itemView.findViewById(resId);
            mViews.put(resId,v);
        }
        return (T) v;
    }

    /**
     * 直接设置textview的text
     * @param resId  控件id
     * @param text   显示内容
     * @return     本类
     */
    public BaseViewHolder setText(int resId,String text){
        View v =mViews.get(resId);
        if (v==null){
            v=itemView.findViewById(resId);
            mViews.put(resId,v);
        }
        ((TextView)v).setText(text);
        return this;
    }
    /**
     * 直接设置ImageView的src
     * @param resId  控件id
     * @param drawableId  图片id
     * @return     本类
     */
    public BaseViewHolder setImage(int resId, int drawableId){
        View v =mViews.get(resId);
        if (v==null){
            v=itemView.findViewById(resId);
            mViews.put(resId,v);
        }
        ((ImageView)v).setImageResource(drawableId);
        return this;
    }

可通过getView()方法获取所有控件绑定数据。也可拓展相应的方法(比如,setText,setImage),可实现链式绑定。
我们平时用的时候上面BaseAdapter和BaseViewHolder两个类基本是不动的。
激动人心的时刻马上要到了,下边我们展示下。

ItemBean测试类:

public class ItemBean {
    public String name;
    public int resId=R.mipmap.ic_launcher;
}

实现第一种方式:

recyclerView.setAdapter(new BaseAdapter<ItemBean>(R.layout.layout_item,data) {
            @Override
            public void onBindViewHolder(BaseViewHolder holder, ArrayList<ItemBean> data, int position) {
                ((TextView)holder.getView(R.id.tvName)).setText(data.get(position).name);
                ((ImageView)holder.getView(R.id.img)).setImageResource(data.get(position).resId);
            }
        });

是不是特别简单。接下来我们看下第二种方式:

 recyclerView.setAdapter(new BaseAdapter<ItemBean>(R.layout.layout_item,data){
            @Override
                            public void onBindViewHolder(BaseViewHolder holder, ArrayList<ItemBean> data, int position) {                               holder.setText(R.id.tvName,data.get(position).name).setImage(R.id.img,data.get(position).resId);
            }
        });

这样下来,我们需要实现一个列表适配器,只需要编写一行代码就可以实现。是不是特别简单。
如果有自己的需求或者代码量特别大,可以单独出一个类 处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值