IM多类型holder封装

如标题,这是一个在列表多类型视图时的一个简化封装方法,减小多余代码,提升复用性,更好迭代扩展,先看视图列表效果图git

 

GitHub:https://github.com/1024477951/FragmentAppgithub

 

 

 

咋一看感受就是一个普通的列表,可是要讲的也不是效果,能够看到通常im列表页类型毕竟多,代码逻辑较复杂,若是没有好好的复用封装后面冗余过多,扩展麻烦优化

最普通的写法应该是直接在适配器的bind方法里根据返回的类型,而后switch,码不一样的逻辑,由于每一个类型的样式都不一样,并且逻辑也不同,因此在没有什么思路的状况下最容易的一种作法3d

固然,不少人都会想到这样很差,要封装一波,抽象成base,避免switch繁琐的操做,而后在bind里经过base类调用,达到复用的操做,我也以为这样挺好的,不事后来发现仍是能够进一步的优化,并且这样还能在原来的基础上更好的达到复用的效果,xml

由于这样一来就至关于把逻辑都放在了viewholder里面,这样也就致使了viewholder里面会有不少重复的操做,好比设置头像,变换消息状态等,这样一来是否是以为还有优化的余地呢,由于基本上每一个类型都少不了头像和状态,并且通常样式都是统一的,blog

因此这就让我生出一个优化的方法来了,把这些共同的地方抽出来看成base,里面的内容视图动态的填充进去,并且若是不想这样或者想彻底改变类型的样式也能经过动态设置来解决,达到一个很好扩展的效果继承

实现思路:get

  首先写base xml,把头像状态一些通用的写进去,而后在 createholder 给内容填充处一个容器视图,建立具体的 holder,这一步操做大体跟一般的建立没有什么大区别,区别在于给视图容器填充了内容视图,以往的都是一整个xml直接加载,如今分为了base和内容。it

  接下来是封装 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

相关文章
相关标签/搜索