RecyclerView两种ViewHolder方案对比:多ViewHolder vs 单ViewHolder哪个更优?
嘿,这个问题问得特别接地气——当用RecyclerView处理多类型列表项时,到底是给每种视图单独写ViewHolder,还是用一个大ViewHolder包下所有布局再控制可见性?答案很明确:为不同视图分别定义独立的ViewHolder是更优的方案,具体原因我给你拆解清楚:
性能更优
单ViewHolder会一次性加载所有类型的视图,哪怕当前列表项用不到的View也会占用内存空间。而且每次绑定数据时,还要反复调用setVisibility()来控制一堆View的显示隐藏,频繁的UI操作会带来额外的性能损耗,列表项数量多的时候,内存占用和滑动流畅度都会受影响。而多ViewHolder只加载当前类型需要的视图,内存占用更合理,绑定数据时也只处理必要的View,效率自然更高。代码维护更轻松
想象一下,一个ViewHolder里塞了5种甚至更多布局的View,onBindViewHolder()方法里全是嵌套的if-else判断哪个类型该显示哪些View,代码会臃肿到难以阅读。后续要修改某个布局或者调整绑定逻辑,得在一堆代码里翻找,很容易牵一发而动全身。而多ViewHolder每个只负责一种视图类型,职责单一,代码结构清晰,谁管什么一目了然,维护起来省心太多。扩展性更强
如果后续要新增一种列表项类型,多ViewHolder只需要新建一个ViewHolder类,在Adapter的getItemViewType()里加个类型标识,onCreateViewHolder()里对应创建新的ViewHolder就行,完全不会影响现有代码。但单ViewHolder就得往里面加新的View成员变量,还要在绑定逻辑里加新的判断分支,越堆越乱,最后变成难以维护的“大泥球”代码。契合设计原则
这其实也符合编程里的单一职责原则:每个ViewHolder只专注于一种视图类型的绑定与展示,职责清晰,代码更健壮。而单ViewHolder一个类干了多个类的活,耦合度极高,很容易出问题。
当然,也不是说单ViewHolder完全不能用——如果你的场景极端简单,只有两三种非常相似的布局,而且确定以后不会扩展类型,临时用用也没问题。但绝大多数实际开发场景中,多ViewHolder是更稳妥、更专业的选择。
内容的提问来源于stack exchange,提问作者Midhun Kumar

