当物品内容被更改时,android Recyclerview Layoutmanager的onLayoutChildren会调用

时间:2015-04-18 19:08:01

标签: android android-listview android-recyclerview

我有一个带有自定义布局管理器的回收站视图(它的twowayview staggeredgridview布局管理器https://github.com/lucasr/twoway-view/blob/master/layouts/src/main/java/org/lucasr/twowayview/widget/StaggeredGridLayoutManager.java

我用它来显示图像列表。 这些图像是异步加载的,这意味着,当项目变为活动状态时,我会解码图像数据,然后将该位图加载到这些列表项视图中。

现在,问题是每当我将图像位图设置到项目的imageview上时,它会导致在布局管理器上调用onLayoutChildren,然后再布置所有子项。

这是预期的行为吗?更改子元素的内容(此处为imageview)会导致父级Recyclerview在其layoutmanager上发出onLayoutChildren?

如果没有,那我该如何防止这种情况?

谢谢,

1 个答案:

答案 0 :(得分:6)

是的,这就是布局系统的工作原理。如果孩子请求布局,则会调用其所有父母的onLayout。

如果您的视图在新位图到达时没有更改大小,您可以通过编写扩展视图的自定义视图并阻止requestLayout调用来处理它。 在RecyclerView的源代码中搜索eatRequestLayout以了解如何执行此操作。