IM多类型holder封装
如标题,这是一个在列表多类型视图时的一个简化封装方法,减少多余代码,提高复用性,更好迭代扩展,先看视图列表效果图
GitHub:https://github.com/1024477951/FragmentApp

咋一看感觉就是一个普通的列表,但是要讲的也不是效果,可以看到一般im列表页类型毕竟多,代码逻辑较复杂,如果没有好好的复用封装后面冗余过多,扩展麻烦
最普通的写法应该是直接在适配器的bind方法里根据返回的类型,然后switch,码不同的逻辑,因为每个类型的样式都不同,而且逻辑也不一样,所以在没有什么思路的情况下最容易的一种做法
当然,很多人都会想到这样不好,要封装一波,抽象成base,避免switch繁琐的操作,然后在bind里通过base类调用,达到复用的操作,我也觉得这样挺好的,不过后来发现还是可以进一步的优化,而且这样还能在原来的基础上更好的达到复用的效果,
因为这样一来就相当于把逻辑都放在了viewholder里面,这样也就导致了viewholder里面会有很多重复的操作,比如设置头像,变换消息状态等,这样一来是不是觉得还有优化的余地呢,因为基本上每个类型都少不了头像和状态,而且一般样式都是统一的,
所以这就让我生出一个优化的方法来了,把这些共同的地方抽出来当作base,里面的内容视图动态的填充进去,而且如果不想这样或者想完全改变类型的样式也能通过动态设置来解决,达到一个很好扩展的效果
实现思路:
首先写base xml,把头像状态一些通用的写进去,然后在 createholder 给内容填充处一个容器视图,创建具体的 holder,这一步操作大致跟通常的创建没有什么大区别,区别在于给视图容器填充了内容视图,以往的都是一整个xml直接加载,现在分为了base和内容。
接下来是封装 baseholder,这样就可以把一些通用的方法操作逻辑写进去,直接在bind里调用,就算没用填充的操作,其实也能直接在base里封装,只是这样的话你在xml里就显的麻烦了,因为假如你的xml样式需要修改一下,那么你每个xml都要去修改
baseholder写好了,对继承类提供抽象方法,这样可以避免bind的时候转换类型操作,直接通过base方法对每个不同的类型自定义逻辑



这样一来无论是xml还是holder,还是adapter,都是很方便的修改扩展,比如你修改xml里的一个状态图标,只需要在base xml里修改一下就行了,逻辑都不用动,需要修改状态逻辑也只需要在baseholder里面修改一下就行了,每个类型的holder都通用,而差异化的逻辑一般只会在自定义的对应holder里面改下就行了,扩展内容也是根据自己的需求在base或者child里面编写代码,有没有感觉很是适合IM类型适配器,会话列表
GitHub:https://github.com/1024477951/FragmentApp
IM多类型holder封装的更多相关文章
- 孟老板 ListAdapter封装, 告别Adapter代码 (上)
BaseAdapter封装(一) 简单封装 BaseAdapter封装(二) Header,footer BaseAdapter封装(三) 空数据占位图 BaseAdapter封装(四) PageHe ...
- 孟老板 ListAdapter封装, 告别Adapter代码 (三)
BaseAdapter系列 ListAdapter封装, 告别Adapter代码 (一) ListAdapter封装, 告别Adapter代码 (二) ListAdapter封装, 告别Adapter ...
- Adapter的封装之路
原文:Adapter的封装之路 一.几种常见列表效果: 假如要用RecyclerView实现下面的几种效果,你会如何实现呢? 效果1:单布局效果 效果2:多布局效果 有多种Item布局 效果3 ...
- BaseAdapter日常的封装
我们日常开发中BaseAdapter使用非常的多,大家有没有想过,再进一步封装,将平常使用的对象集合,利用泛型放入集合中,再也不用每次都重写那几个方法了,当然我也提供我的下载地址(https://gi ...
- Android--带你一点点封装项目 MVP+BaseActivity+Retrofit+Dagger+RxJava(一)
1,其实早就想把这些东西给封装封装的,一直没有时间,今天刚好项目进入到测试阶段了,Bug同事在哪儿测试的飞起,但发现提bug的尽然是我(得意脸),然后上午把ios的包测试了一下,顺便把服务器给测挂了( ...
- Android--RecyclerView的封装使用
1,用了很长一段时间的RecyclerView,在项目中用的频率也越来越频繁(因为踩得坑也越来越多了),或过头来看,感觉一直在写RecyclerView.Adapter中的三个方法和一个内部类,感觉很 ...
- android代码优化----ListView中自定义adapter的封装(ListView的模板写法)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- RecyclerView再封装
RecyclerView做为ListView的替代品,已经出了很久了,既然是替代品,那自然有些ListView没有的优点.比如说:可以随意切换list,grid,stagger.可以指定一个或多个it ...
- jquery封装常用方法
var git = { //true表示格式正确 checkEmail: function (str) { -]{,})(\S*)/g) == null) { return false; } else ...
随机推荐
- Hadoop HA高可用集群搭建(Hadoop+Zookeeper+HBase)
声明:作者原创,转载注明出处. 作者:帅气陈吃苹果 一.服务器环境 主机名 IP 用户名 密码 安装目录 master188 192.168.29.188 hadoop hadoop /home/ha ...
- SpringBoot集成Lombok,应用+源码解析,让代码优雅起来
一.Lombok简介 (1)Lombok官网(https://projectlombok.org/)对lombok的介绍 (2)GitHub项目地址:https://github.com/rzwits ...
- 《k8s-1.13版本源码分析》-抢占调度
源码分析系列文章已经开源到github,地址如下: github:https://github.com/farmer-hutao/k8s-source-code-analysis gitbook:ht ...
- Python爬虫入门教程 38-100 教育部高校名单数据爬虫 scrapy
爬前叨叨 今天要爬取一下正规大学名单,这些名单是教育部公布具有招生资格的高校名单,除了这些学校以外,其他招生的单位,其所招学生的学籍.发放的毕业证书国家均不予承认,也就是俗称的野鸡大学! 网址是 ht ...
- 使用myeclipse修改项目映射路径
这里主要做下记录,找到myeclipse中对项目路径进行查看以及修改的地址 如图 点击项目右键 实例url:http://localhost:8080/myFirstServlet/one 对应路径中 ...
- JS 实现的年月日三级联动
js文件 SYT="-请选择年份-"; SMT="-请选择月份-"; SDT="-请选择日期-"; BYN=50;//年份范围往前50年 A ...
- SAP MM 预留单据的历史修改记录?
SAP MM 预留单据的历史修改记录? 在笔者眼里,SAP系统是一个高度严谨的软件系统.用户在SAP系统里的相关操作,系统都会做记录.用户对于系统的相关单据的增删改,SAP系统都有保留change h ...
- 全球第一免费开源ERP Odoo仓存功能模块深度应用(一)
基本功能 库位 库位是一个逻辑存货区,可以是一个物理库区,可以是一个货架.货架上的一个货位.库位可以有子库位 库位有虚拟库位和实际库位,实际库位是实际存放货物的库位,虚拟库位是因复式库存记账而虚构的库 ...
- 【error】Gradle sync failed: Unable to start the daemon process.【已解决】
---恢复内容开始--- 在克隆GIT项目后,Android Studio 报错: Gradle sync failed: Unable to start the daemon process. Th ...
- Windows Server 2016-命令行批量导出AD用户列表信息
本章节为大家带来如何通过Powershell或ldifde命令行方式导出域用户列表信息,方便大家日常运维工作中使用. Powershell方式导出现有Staff目录下所有用户信息列表: Get-ADU ...