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

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

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

在6个项目中,5个在屏幕上可见.第六是隐藏的.

现在,在执行操作(拖放此处)时,我会修改每个项目中的内容.这种情况正在发生.

但是,仅适用于可见项目.

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

我在适配器中使用了Recycler视图的getChildCount()方法,它将值显示为5(不是6).我调试并发现它目前正在考虑屏幕上可见的儿童数量.

如果我向下滚动一点,可以看到第1项的下半部分和第6项的上半部分,并执行修改所有项目内容的动作 – 它有效!

我认为使用LinearLayoutManager是一个解决方案,因为它在任何情况下都会将itemCount返回为6,但无法理解如何使用它来访问RecyclerView的item / child.

我故意尝试使用getChildAt(5)访问和修改RecyclerView的第6项,并且我得到了NullPointerException,因为RV没有识别该项目,因为它在屏幕上是不可见的.

此外,正在执行操作的项目内容中的修改正在使用在RV适配器内部键入的代码,在自定义方法中执行,而不是像在onBindViewHolder(…)上通过获取对视图的引用来覆盖RecyclerView适配器的方法并在getChildAt()的帮助下访问他们的子视图.

我怀疑是否需要代码,但如果需要,请告知.我正在使用自定义DragListener类,我正在访问每个RecyclerView项的视图,子视图和修改数据.

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

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

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

RecyclerView的名称有其正当之处.只创建了可见的项目(加一个),然后每当一个项目消失时,另一个项目将被重新用于任何新出现的项目.这就是为什么它会稍微向上移动您的视图.现在您可以看到六个项目.

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

点赞