【发布时间】:2016-04-27 10:41:25
【问题描述】:
我尝试搜索这个问题,但找不到合适的解决方案。
基本上,我有一个包含 RecyclerView 的布局,有 6 个项目。
在 6 个项目中,有 5 个在屏幕上可见。第六是隐藏。
现在在执行一个动作(拖放到这里)时,我会修改每个项目中的内容。这正在发生。
但是,仅适用于可见项目。
当我在执行操作后向下滚动到第 6 项时,它不会显示更改。只有可见的 5 个可以。
我在适配器中使用了getChildCount() 回收器视图方法,它显示的值为 5(不是 6)。我调试后发现它目前正在考虑将孩子的数量视为屏幕上可见的数量。
如果我向下滚动一点,那么第 1 项的下方和第 6 项的上半部分是可见的,并执行修改所有项目内容的操作 - 它有效!
我认为使用 LinearLayoutManager 是一种解决方案,因为它在任何情况下都会将 itemCount 返回为 6,但无法理解如何使用它来访问 RecyclerView 的项目/子项。
我故意尝试使用 getChildAt(5) 访问和修改 RecyclerView 的第 6 项,但我得到了 NullPointerException,因为 RV 无法识别该项目,因为它在屏幕上是不可见的。
此外,在执行操作时,项目内容的修改是使用在 RV 适配器中键入的代码在自定义方法中执行的,而不是通过获取对视图的引用,而不是像 onBindViewHolder(...) 这样的 RecyclerView 适配器的覆盖方法并在getChildAt() 的帮助下访问他们的子视图。
我怀疑是否需要代码,但如果需要,请告知。我正在使用自定义 DragListener 类,我在其中访问每个 RecyclerView 项的视图、子视图并修改数据。
如何访问 RV 的所有项目(可见和隐藏)并一次性修改它们?
【问题讨论】:
-
我想这很明显,因为访问项目和修改的合法方式是通过 OnBindViewHolder(...)。如果正确,那么我该如何让它与 OnDragListener 方法一起使用?因为如果我在 Adapter 中使用 OnDragListener,对于某些功能,我无法让它同时与 Adapter 方法协调。我希望我很清楚......
-
你为那个项目打电话给
notifyItemChanged(position)。 -
对不起 Qamar,但我看不出我的问题和这种方法之间有什么联系。也许您必须通过解决我的问题来详细说明并让我理解
-
请澄清您的问题,以免人们猜错。用更少的词来解释。您是否需要更改为该不可见项目视图发布的视图或数据?
-
这种情况你可以先确认一下。抱歉,但我想提供完整的图片以获得完美的解决方案。只要时间允许,也许可以逐字逐句慢慢读一遍。我想修改item中的数据。
标签: android drag-and-drop android-recyclerview