关于 List 组件的滚动行为

List 类使用一种相当复杂的算法进行滚动。列表只会列出它一次最多能够显示的行,超出 rowCount 属性值的项不会显示。在列表滚动时,它会将所有行上下移动(取决于滚动方向)。然后,列表将回收滚出视图的行;它会重新初始化这些行,并将它们用作正在滚动到视图的新行。为此,列表将旧行的值设置为视图中的新项目,然后将旧行移动到新项目滚动到视图中时所在的位置。

考虑到这种滚动行为,您无法期望只使用单元格代表一个值。重复使用行意味着单元格渲染器必须知道当它被设置为新值时如何完全重置其状态。例如,如果单元格渲染器创建了图标来显示某个项目,在使用它渲染另一项目时,可能需要移除该图标。假设单元格渲染器是一种随着时间的改变将填充许多项目值的容器,并且它必须知道如何使本身从显示某个值完全转换到显示另一个值。事实上,单元格甚至还应该知道如何正确地渲染未定义的项目,这可能意味着删除单元格中的所有旧内容。