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

来源:互联网 发布:桂正和is知乎 编辑:程序博客网 时间:2024/06/16 13:31

我们平时要实现一个列表的功能。通常第一步要创建一个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);            }        });

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

阅读全文
0 0
原创粉丝点击