如何访问隐藏的RecyclerView项目?

问题描述:

我试着搜索这个问题,但找不到合适的解决方案。如何访问隐藏的RecyclerView项目?

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

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

现在在执行一个动作(在这里拖放),我修改了每个项目中的内容。这发生了。

但是,只为可见项目。

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

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

如果我向下滚动一点,第一项和第六项的上半部分的下面部分是可见的,并执行操作来修改所有项目内容 - 它的工作原理!

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

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

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

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

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

+0

我想这是显而易见的作为访问一个项目和修改的合法途径是通过OnBindViewHolder(...)。如果正确,那么我如何才能使用OnDragListener方法?因为如果我在Adapter中使用OnDragListener,对于某些功能,我不能同时让它与Adapter方法协调。我希望我很清楚...... –

+0

您是否为该项目调用了'notifyItemChanged(position)'。 – Qamar

+0

对不起Qamar,但我没有看到我的问题和这种方法之间的很多联系。也许你必须详细说明,并通过解决我的问题让我明白 –

仍然没有答案的问题,你有同样的问题?通过研究问题帮助我们找到解决方案,然后贡献研究结果以及您尝试的其他部分作为部分答案。这样,即使我们无法弄清楚,下一个人还有更多的事情要做。也可以在答案中获得一些声望并投票回答问题,这样可以获得更多的关注,也可以在问题上设置奖励。

+0

请不要将此作为答案。等到你有足够的声望发表评论,然后在问题上添加评论。 – bfontaine

+1

k好友... –

+0

可以给我答案... –

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

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

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

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