Android开发之adapter

开源项目地址: 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<Status>(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<String>(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<ChatMessage>()
{
    @Override
    public int getLayoutId(int itemType)
    {
       //根据itemType返回item布局文件id
    }

    @Override
    public int getItemViewType(int postion, ChatMessage msg)
    {
       //根据当前的bean返回item type
    }
}

mRecyclerView.setAdapter(new SectionAdapter<String>(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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值