【问题标题】:android Recyclerview Layoutmanager's onLayoutChildren called when item content is changedandroid Recyclerview Layoutmanager的onLayoutChildren在item内容改变时调用
【发布时间】:2015-04-18 19:08:00
【问题描述】:

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

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

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

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

如果没有,那我该如何防止呢?

谢谢,

【问题讨论】:

    标签: android android-listview android-recyclerview


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的解决方案,但您能否分享一些示例代码。
    • 另外,在androidx RecyclerView中,找不到EatRequestLayout方法,只能在v7支持版本中找到
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多