换种方式(思想)封装RecyclerView.Adapter,我的利器(TreeRecyclerView)。

转载请标明出处://www.greatytc.com/p/e5e094e70b8e
本文出自:Jlanglang

前言

实际开发中,社交或者商城类,新闻类的app,大部分的页面都是列表.

写列表adapter的速度,基本决定整个app的开发速度.

还记得刚做安卓的时候,写listview的adpater,写一个列表写一下午.简直丧心病狂.

之后出现了RecyclerView,还有一大批优秀的开源Adapter.代码已经很省心了.

然而,在做一个项目时,不同的列表可能会出现部分重复,靠写adapter来复用就搞不定了。
再比如,复杂的多type列表还是会出现上百行代码在onBindViewHolder里面的情况,维护不易。

说说为什么我要写TreeRecyclerView

最开始目的,仅仅是为了解决多级折叠列表.

传送门:一个RecyclerView实现多级折叠列表(一)
传送门:一个RecyclerView实现多级折叠列表(二)

但是更新到现在,TreeRecyclerView这个名字其实已经不适合了.

随着具体使用,更新优化,我发现RecyclerView的Adapter可以换种思想,换个写法.

简介:

为了便于阅读,下文会用item来表示列表的条目。

(一)MVP

以下个人见解

从RecyclervView的角度来分析:

M:塞给adapter的list数据就是modle

V:recyclerview

P:adapter。

从adapter的角度来分析,将adapter拆成多个P(Item):

P:
如果把不同type的item看成一个个可以复用的presenter.
每写一种item,就代表该项目里多一个可以复用的presenter

adapter的onbindviewholder将没有具体的绑定逻辑
绑定操作在各种item里完成,逻辑更清晰,修改维护更容易。

M:

每一种Item对应一种Model.

可以跟后台设计model的属性,
根据特定的属性来控制要展示的item样式.
然后通过创建工厂,生成List<Item>
一行搞定item的创建
不用多写其他代码.

M可以决定创建什么样的Item.也就是P

V:

每一种Item,都需要对应的view类型,我目前直接用布局id来代表view
这一块还是缺陷,目前的设计,个人觉得不完美.

(二)设计模式

组合模式:

如果把每种item之间关系看作View和ViewGruop一样.

那么组合就会有无限可能.
什么多级列表多type(有些设计还是会不和谐,得从layoutmanager下手)都不是问题。

ViewGroup可以包含多种类型的子View,并且继承于View.

装饰模式:

对于改动需求,某些功能,用装饰者模式来完成修改是快速的.且不影响原代码
比如添加头部和尾部view,添加emptyView,item侧滑删除功能.

各种封装adpater之间随意装饰组合,个人觉得比较高效,但是装饰过多难掌控.

工厂模式:

创建item不应该是一个苦力活,大可以通过工厂来生成各种item.只需配置一下数据model和Item的对应关系.
责任链:
item写了个简单的事件拦截
策略模式:
基本就是抽象功能.能够用子类实现替换.这种用的地方挺多的

举个adapter场景例子:

需求初定:

需求定下来了,一个好友列表.展示好友,点击跳转(分分钟搞定)

第一次修改:

这个时候产品说这样不行,得加个首字母分类,侧边索引定位
......于是,吐槽一番去找索引定位的demo.然后adapter一堆改.(改你mb)

第二次修改:

光有索引也不行,再加个下拉刷新,上啦加载分页.加载时动画,空数据页面
好,去找demo.继续改(心力憔悴)

第三次修改:

哥们,这个好友列表再加上侧滑删除怎么样??
.....(信不信我删库跑路)
这个时候,是不是有砍人的冲动了..
没办法,接着找demo.然后对着adapter一顿加功能.
到这个状态,如果不用装饰,不用继承.我估计是写不下去的.

第n次修改:

这个列表能不能加个头部啊,上次那个需求好像不太好,去掉吧.
这个列表能实现点击折叠吗?这个有bug啊.....(已阵亡)
我们的大部分时间就花在这些修改上面了.虽然描述的有点丧心病狂
但确确实实,基本都会改个几次的.
怼产品也不能解决问题.自身强大才是硬道理

上面的问题,我是这么处理的,看看就好(0- 0)
Paste_Image.png

不管是加功能还是去功能,改动地方并不会特别大.

最后来张丧心病狂的效果图:

Paste_Image.png

总结:

水平有限,设计模式也是懂点皮毛.设计上很多问题.一个人设计确实挺难的.但也学到了很多东西.
这篇文章主要讲个思路,具体用法其实在其他两篇文章里面写的挺详细的了.虽然现在有些类删了,有些类改名了.思路和前两篇文章也有点出路
但大致用法没变的.有兴趣可以看看.

希望我的经历能让你学到点东西

下一篇文章,大概会把这个项目demo里的例子都详细描述一下.

---------------------------------分割线---------------------------------------

传送门:TreeRecyclerView

已经有52颗星了,挺高兴的.哈哈

喜欢与回复是我最大的动力-_-

只要有新的idea,我就会更新上去.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,546评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,224评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,911评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,737评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,753评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,598评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,338评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,249评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,696评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,888评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,013评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,731评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,348评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,929评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,048评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,203评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,960评论 2 355

推荐阅读更多精彩内容