[CymChad/BaseRecyclerViewAdapterHelper]关于getItemViewType

2024-08-08 808 views
1

当前有一个Model,这个Model需要拆分成N部分显示(每一部分都需要根据不同状态显示不同的布局),于是通过多布局实现,但是对比代码,发现了一些限制,下边是BaseQuickAdapter中getItemViewType的实现代码,摘录如下:
int numHeaders = getHeaderLayoutCount(); if (position < numHeaders) { return HEADER_VIEW; } else { int adjPosition = position - numHeaders; _int adapterCount = mData.size(); if (adjPosition < adapterCount) { return getDefItemViewType(adjPosition); } else { adjPosition = adjPosition - adapterCount; int numFooters = getFooterLayoutCount(); if (adjPosition < numFooters) { return FOOTER_VIEW; } else { return LOADINGVIEW; } } } 这样实现就可能造成现在的办法不能实现,adapterCount=mData.size()直接限制了大小,是否可以把int adapterCount=mData.getSize单独拿出来实现一个方法,例如getDataShowCount(),方便这种方式的扩展

回答

7

实现一个Model代理类,持有Model对象,需要展示N个部分就创建N个Model代理对象

3

这个差距是指什么呢?

1

这样的实现方式虽然实现了功能,但是创建了N个代理类,对于列表来说,可能就需要创建很多的代理类,有些浪费了

4

创建代理对象的消耗并不大,信息依然是由Model类持有,只是持有Model对象的引用而已。

3

如果列表的的Model很多,而Model对应的子View有较多时,如果滑动了很多,中间就会创建很多的代理类,虽然创建代理的消耗并不大,但是积少成多,相对于只是引用自身而言还是有差距的,嘻嘻

5

这个时候就需要那句话了:过早的优化是万恶之源;而且你的思路就不需要添加新字段吗?

0

哈哈 就是想尽可能的减少吧

6

你的思路,最起码要在Model类里面添加对应View类型的标记,还有要显示的个数。既然是Model,我觉得还是要简单一点,只有信息就可以了,不要与业务逻辑有太多的耦合。

5

嗯 好的 谢谢

1

不客气,如果真的出现性能问题,在根据出现瓶颈的地方优化吧

2

我现在也正研究这个,我是做一个有head,而且每个item不一样,需要返回不同的viewholder,现在就是不能用corent那个方法。只能通过onbindview实现,判断positipn,如果用conrent那个方法会在里面报错就是position的问题,所以如果能添加一个功能,就是viewstub就好了