RecyclerView与Inflate的二三事

View.inflate(context,resId,root)

attachToRoot这个属性

会使某个xml最外层的属性值失效

https://bugly.qq.com/v2/crash-reporting/crashes/69bcd1f57e/10424?pid=1

https://bugly.qq.com/v2/crash-reporting/crashes/69bcd1f57e/10446?pid=1

https://bugly.qq.com/v2/crash-reporting/crashes/69bcd1f57e/10341?pid=1


好久之前的草稿了,实际内容已经忘掉了,所以以后有问题想写什么,还是得赶紧写。

大概情况是

用RecyclerView做消息流
使用的是开源库:
github地址 BaseRecyclerViewAdapterHelper
当时有大概13种消息类型,所以需要不同的布局来呈现,但是每个消息类型又有相同的控件,比如头像和昵称这种。

所以就偷懒,抽离一个共同组件的布局,再加上一个供不同类型展示的布局区域,这样每个不同消息块就只要add一个view上去。

RecyclerView与Inflate的二三事_第1张图片
大概就像这样

最后的结果出现,不同的消息类型,并不会按照我所想的,老老实实的排布,原因就是recyclerView的缓存机制。

而且我这里对每个view当时没有判断,甚至出现了不同类型view的叠加。

当时解决重叠是用


RecyclerView与Inflate的二三事_第2张图片
判断父级view有没有已经attach上去的子view

加上这个方案
https://github.com/CymChad/BaseRecyclerViewAdapterHelper/issues/968

多个holder去处理。

最后处理同一种消息类型的时候,因为width要做变长,又出现了同一holder里的view重叠。原因同样是recyclerView的缓存机制导致。

那recyclerView的缓存机制到底是什么?
http://www.jianshu.com/p/193fb966e954
当我把父级msg_container换成LinearLayout的时候,view是依次竖着排,其实就是出现了view的叠加。

后来一直没搞出来,直接单独写了一个布局给这个变长消息类型,不再用addView的方式了。

其实就是忘了细节了,太监了

你可能感兴趣的:(RecyclerView与Inflate的二三事)