当前有一个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(),方便这种方式的扩展
Q
[CymChad/BaseRecyclerViewAdapterHelper]关于getItemViewType
0
A
回答
4
实现一个Model代理类,持有Model对象,需要展示N个部分就创建N个Model代理对象
5
这个差距是指什么呢?
3
这样的实现方式虽然实现了功能,但是创建了N个代理类,对于列表来说,可能就需要创建很多的代理类,有些浪费了
4
创建代理对象的消耗并不大,信息依然是由Model类持有,只是持有Model对象的引用而已。
6
如果列表的的Model很多,而Model对应的子View有较多时,如果滑动了很多,中间就会创建很多的代理类,虽然创建代理的消耗并不大,但是积少成多,相对于只是引用自身而言还是有差距的,嘻嘻
0
这个时候就需要那句话了:过早的优化是万恶之源;而且你的思路就不需要添加新字段吗?
2
哈哈 就是想尽可能的减少吧
8
你的思路,最起码要在Model类里面添加对应View类型的标记,还有要显示的个数。既然是Model,我觉得还是要简单一点,只有信息就可以了,不要与业务逻辑有太多的耦合。
3
嗯 好的 谢谢
9
不客气,如果真的出现性能问题,在根据出现瓶颈的地方优化吧
7
我现在也正研究这个,我是做一个有head,而且每个item不一样,需要返回不同的viewholder,现在就是不能用corent那个方法。只能通过onbindview实现,判断positipn,如果用conrent那个方法会在里面报错就是position的问题,所以如果能添加一个功能,就是viewstub就好了