gpt4 book ai didi

android - 如何访问隐藏的 RecyclerView 项目?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:15:23 25 4
gpt4 key购买 nike

我尝试搜索这个问题,但找不到合适的解决方案。

基本上,我有一个包含 RecyclerView 的布局,其中有 6 个项目。

6 个项目中有 5 个在屏幕上可见。第 6 个是隐藏的。

现在执行一个操作(拖放此处),我修改每个项目中的内容。这正在发生。

但是,仅针对可见项。

当我在执行操作后向下滚动到第 6 个项目时,它没有显示更改。只有可见的 5 个可以。

我在适配器中使用了回收器 View 的 getChildCount() 方法,它显示的值为 5(不是 6)。我调试了一下,发现它目前正在考虑屏幕上可见的 child 数量。

如果我向下滚动一点,第一项的下半部分和第六项的上半部分是可见的,然后执行修改所有项内容的操作 - 它有效!

我认为使用 LinearLayoutManager 是一种解决方案,因为它在任何情况下都将 itemCount 返回为 6,但无法理解如何使用它来访问 RecyclerView 的项目/子项。

我故意尝试使用 getChildAt(5) 访问和修改 RecyclerView 的第 6 个项目,但我得到了一个 NullPointerException,因为 RV 由于不可见而无法识别该项目在屏幕上。

此外,在执行操作时,项目内容的修改是使用 RV 适配器内键入的代码在自定义方法中执行的,而不是 RecyclerView 适配器的重写方法,如 onBindViewHolder(...) 通过获取对 View 的引用并在 getChildAt() 的帮助下访问它们的 subview 。

我怀疑是否需要代码,但是如果需要,请告知。我正在使用自定义 DragListener 类,我在其中访问 View 、每个 RecyclerView 项目的 subview 并修改数据。

如何访问 RV 的所有项目(可见和隐藏)并一次性修改它们?

最佳答案

您不能通过直接操作 RecyclerView 的子项来修改 RecyclerView 的项目。相反,您必须通过更改适配器中的项目来应用所有更改。

假设您有一个标题,并且这个标题现在在重新排序后发生了变化。然后您必须更改适配器中所有元素的标题。最后,您必须触发重绘这些项目。

RecyclerView 有它的名字是有原因的。仅创建可见项目(加一个),之后每当一个项目消失时,另一个项目将被重新用于任何新出现的项目。这就是为什么如果你稍微向上移动你的 View 它会起作用的原因。现在您有六个项目可见。

对于足够大的数据集,子项数量远低于构成显示数据基础的项目数量。因此,您无法使用 RecyclerView 的子项更改数据。

关于android - 如何访问隐藏的 RecyclerView 项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36887489/

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