Android开发truck快速开发框架Adapter(四)

简介

truck项目的github地址: https://github.com/hookYuan/Truck
Adapter是Android开发中绕不开的一个话题,因为在Android中如果要实现大量数据的列表,离不开Listview,GridView,RecyclerView。而我这里做的主要就是针对特定的需求对不同的列表的Adapter做一定的封装,最后在谈一谈我再开发中遇到的复杂列表都是如果处理的,提供一个快速的实现方案。

示例

在我刚开始接触Android的时候,大家普遍使用的是ListView,GridView。然而当我渐渐走进Android的时候,发现大家也渐渐从ListView、GridView走向了RecyclerView。在我看来,如果是简单布局,用recyclerViewh和ListView是没有什么本质区别的,但是如果需要处理复杂的列表布局时,ListView的回收机制就显得有点不够聪明,所以往往复杂的情况下,我都是推荐使用RecyclerView。首先谈谈BaseListAdapter。具体使用如下:
 listView.setAdapter(new BaseListAdapter<String>(getData(), R.layout.text_item_layout) {
            SparseBooleanArray collapsedStatus = new SparseBooleanArray();

            @Override
            public void bindView(ViewHolder holder, String obj) {
                CollapsedTextView textView = holder.getView(R.id.ctv_content);
                textView.setTextList(obj, collapsedStatus, holder.getItemPosition());
            }
        });
泛型String表示List中数据类型,通过构造方法传入数据源,item布局。在bindView方法中实现对数据与View的绑定。封装了一些简单的方式来实现绑定,例如holder.setText()等。
接下来谈谈RLVAdapter,具体实现如下:
public class SelectContactsAdapter extends RLVAdapter {

    private List<PSelectContacts.User> listUser;

    public SelectContactsAdapter(Context context, List<PSelectContacts.User> listUser) {
        super(context);
        this.listUser = listUser;
    }

    @Override
    public int getItemViewType(int position) {
        return 1;
    }

    @Override
    public int getItemLayout(ViewGroup parent, int viewType) {
        if (viewType == 0) {
            return R.layout.act_three_select_contacts_head;
        } else
            return R.layout.act_three_select_contacts_item;
    }

    @Override
    public void onBindHolder(ViewHolder holder, int position) {
        int pos = position;
        holder.setText(R.id.tv_contact_name, listUser.get(pos).getName());
        ImageView ivAvatar = holder.getView(R.id.iv_contacts_avatar);
        GlideHelper.loadCircle(listUser.get(pos).getAvatar(), ivAvatar);
    }

    @Override
    public void onItemClick(ViewHolder holder, View view, int position) {

    }

    @Override
    public int getItemCount() {
        return listUser.size();
    }
}
RLVAdapter主要对ViewHolder进行封装,在Adapter中添加item默认点击事件。基本用法同BaseListAdapter。
ExpandAdapter,这个是我经常在需求见到需要做可折叠的列表,然而系统默认的折叠列表总觉得定制性不高,且没有任何动画效果。ExpandAdapter默认添加RecyclerView插入动画、删除动画。ExpandAdaper使用只需继承ExpandAdapter,复写相关方法即可。
GridDivider,RecyclerView的分割线。recyclerView可以通过设置GridDivider实现分割线效果,GridDivider分割线支持自定义分割线颜色、自定义分割线高度、自定义分割线背景图片。具体使用方法如下:
 rlvWhiteMe.addItemDecoration(new GridDivider((int) Kits.Dimens.dpToPx(mContext, 10f)
                , ContextCompat.getColor(mContext, R.color.background_rlv)));

快速实现

介绍完了以上3中Adapter和GridDivider,是不是觉得开发有种事半功倍的效果。接下在推荐一种truck中列表的专用模板MVPListActivity。具体使用方法,请参考  

Android开发truck快速开发框架MVP实现(二)

。MVPListActivity模板,一键生成Adapter,Activity,Presenter。当出现列表界面时,让你只专注于item界面的搭建、专注于逻辑判断、减少重复性代码。当然对于一般的列表界面这样已经完全足够了,但是如果你遇到的是类似淘宝首页,甚至比他还要复杂的时候,我推荐使用vlayout来实现,vlayout在我看来就是一个功能特别全面的自定义Adapter,毕竟alibaba都用它来实现复杂界面,我们有什么及理由拒绝呢。我用vlayout搭建过几个复杂界面,初次使用确实有一点坑,建议就是,多多看看github上的常见问题。
最后附上truck快速开发交流qq群:698442320
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值