开源项目地址: https://github.com/JoanZapata/base-adapter-helper

项目依赖添加

compile 'com.joanzapata.android:base-adapter-helper:1.1.11'

BaseAdapterHelper

还有部分set方法就不一一列举了,如果你还有一些自己的自定义控件的set、get方法也可以自己往内部添加,调用方法builder模式,BaseAdapterHelper也就是我们常用的ViewHolder,换了一种更为优雅的方式展现在我们面前。

return BaseAdapterHelper.get(context, convertView, parent, R.layout.item)          .setText(R.id.tvName, contact.getName())          .setText(R.id.tvEmails, contact.getEmails().toString())          .setText(R.id.tvNumbers, contact.getNumbers().toString())          .getView();

BaseQuickAdapter

BaseQuickAdapter内部提供了一些数据得操作方法,供外部调用,getItemViewType默认支持多种布局,这里默认0,getView方法内获取BaseAdapterHelper实例,调用helper.getView获得converView

 @Override    public View getView(int position, View convertView, ViewGroup parent) {        if (getItemViewType(position) == 0) {            final H helper = getAdapterHelper(position, convertView, parent);            T item = getItem(position);            // 抽象方法,具体实现根据自己业务需求            convert(helper, item);            helper.setAssociatedObject(item);            return helper.getView();        }        return createIndeterminateProgressView(convertView, parent);    }

QuickAdapter

重写了两个构造方法,实现了获取BaseAdapterHelper实例

 protected BaseAdapterHelper getAdapterHelper(int position, View convertView, ViewGroup parent) {        return get(context, convertView, parent, layoutResId, position);    }

EnhancedQuickAdapter

EnhancedQuickAdapter相比较于QuickAdapter,重写了covert方法,新增itemChange的状态值

  @Override    protected final void convert(BaseAdapterHelper helper, T item) {        boolean itemChanged = helper.associatedObject == null || !helper.associatedObject.equals(item);        helper.associatedObject = item;        convert(helper, item, itemChanged);    }    /**     * @param helper      The helper to use to adapt the view.     * @param item        The item you should adapt the view to.     * @param itemChanged Whether or not the helper was bound to another object before.     */    protected abstract void convert(BaseAdapterHelper helper, T item, boolean itemChanged);

大概类过了一遍,再来看看具体的代码调用实例

  if (adapter == null)            adapter = new QuickAdapter(getActivity(), R.layout.tweet,mList) {                @Override                protected void convert(BaseAdapterHelper helper, Status status) {                    boolean isRetweet = status.isRetweet();                    if (isRetweet) status = status.getRetweetedStatus();                    helper.setText(tweetText, status.getText())                            .setVisible(tweetRT, isRetweet)                            .setText(tweetName, status.getUser().getName())                            .setText(tweetDate, dateFormat.format(status.getCreatedAt()))                            .setImageUrl(tweetAvatar, status.getUser().getProfileImageURL())                            .linkify(tweetText);                }            };        listView.setAdapter(adapter);

洪洋的BaseAdapter

引用项目依赖

compile 'com.zhy:base-adapter:2.0.0'

base-adapter-helper这个库对Adapter的封装还不是最彻底的,目前洪洋的BaseAdapter在这个库的基础上再次封装,使用更方便简单,扩展性能更好https://github.com/hongyangAndroid/baseAdapter,Adapter常用的单种Item:

mRecyclerView.setAdapter(new CommonAdapter(this, R.layout.item_list, mDatas){    @Override    public void convert(ViewHolder holder, String s)    {        holder.setText(R.id.id_item_list_title, s);    }});

多种Item或Header布局:

MultiItemTypeSupport  multiItemSupport = new MultiItemTypeSupport(){    @Override    public int getLayoutId(int itemType)    {       //根据itemType返回item布局文件id    }    @Override    public int getItemViewType(int postion, ChatMessage msg)    {       //根据当前的bean返回item type    }}mRecyclerView.setAdapter(new SectionAdapter(this, mDatas, multiItemSupport){    @Override    public void convert(ViewHolder holder, String s)    {        holder.setText(R.id.id_item_list_title, s);    }});

对于该库翔已有博客说明不再累赘叙述,本篇只做个记录,翔博客地址:http://blog.csdn.net/lmj623565791/article/details/51118836

更多相关文章

  1. 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
  2. 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
  3. LogCat中不输出任何的信息
  4. Android与JS之间的互相调用交互(二)
  5. 动态设置控件宽高
  6. android - ViewPager 监听左右滑动
  7. Android(安卓)工具
  8. Android(安卓)解决bug:异常提示"ListView cannot be cast to andr
  9. ViewGroup为什么不会调用onDraw

随机推荐

  1. Android animation 之视图动画、帧动画、
  2. 【腾讯Bugly干货分享】Android动态布局入
  3. Android Studio 安装具体步骤(配图)
  4. Flutter移动开发UI框架理解(一)
  5. Android 添加一个产品
  6. 第一个Android应用程序
  7. [004] 详解Windows平台搭建Androiod开发
  8. Android(安卓)之 Service服务介绍
  9. android 关于Location of the Android SD
  10. Android(安卓)自定义View——自定义Progr