gpt4 book ai didi

android - 了解 RecyclerView setHasFixedSize

转载 作者:IT老高 更新时间:2023-10-28 13:01:54 26 4
gpt4 key购买 nike

我在理解 setHasFixedSize() 时遇到了一些问题。我知道当 RecyclerView 的大小没有改变时,它用于优化,来自文档。

那是什么意思?在最常见的情况下,ListView 几乎总是具有固定大小。在什么情况下它不是固定大小?这是否意味着它在屏幕上占据的实际空间随着内容的增长而增长?

最佳答案

一个非常简化版的 RecyclerView 有:

void onItemsInsertedOrRemoved() {
if (hasFixedSize) layoutChildren();
else requestLayout();
}

This link描述了为什么调用 requestLayout 可能很昂贵。基本上,每当插入、移动或移除项目时,RecyclerView 的大小(宽度和高度)可能会发生变化,进而 View 层次结构中任何其他 View 的大小可能会发生变化。如果经常添加或删除项目,这尤其麻烦。

当改变适配器的内容并不会改变它的高度或宽度时,通过将 setHasFixedSize 设置为 true 来避免不必要的布局传递。


更新: JavaDoc 已更新,以更好地描述该方法的实际作用。

RecyclerView can perform several optimizations if it can know in advance that RecyclerView's size is not affected by the adapter contents. RecyclerView can still change its size based on other factors (e.g. its parent's size) but this size calculation cannot depend on the size of its children or contents of its adapter (except the number of items in the adapter).

If your use of RecyclerView falls into this category, set this to {@code true}. It will allow RecyclerView to avoid invalidating the whole layout when its adapter contents change.

@param hasFixedSize true if adapter changes cannot affect the size of the RecyclerView.

关于android - 了解 RecyclerView setHasFixedSize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28709220/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com