ListView如何清除选择

ListView How to clear selection

所以我在列表视图上有一个选择器,其中每行有 2 text views,每个文本视图都有另一个同步选择器(相同状态的不同绘图:activatedpressed) 与列表中的那个。我的逻辑是,当我在列表视图中检测到某项时,我会暂时更改该视图的背景颜色,并在 500 毫秒后将其设置回透明。

但是,当它重置时,有时子视图会将其按下状态设置为 true,有时两种方式都不会,视图具有正确的背景,但内部 text views 始终对应于它们的 activated drawables 甚至当按下状态为假时。

我似乎不知道如何纠正这种行为。非常感谢任何帮助,这件事让我抓狂。

我试过清除选择,但没有帮助,我什至试图明确强制子视图为其激活状态和按下状态设置 false,这也没有用。我真的 运行 对此无能为力。

因此,在花了很多时间分析 AbsListView 中幕后发生的事情之后,我找到了解决此问题的方法。首先更多关于导致这个问题的问题,AbsListView 有 8 个状态用于运动检测,即 -

  1. TOUCH_MODE_REST (-1)
  2. TOUCH_MODE_DOWN (0)
  3. TOUCH_MODE_TAP (1)
  4. TOUCH_MODE_DONE_WAITING (2)
  5. TOUCH_MODE_SCROLL (3)
  6. TOUCH_MODE_FLING (4)
  7. TOUCH_MODE_OVERSCROLL (5)
  8. TOUCH_MODE_OVERFLING (6)

并且当 ACTION_UP 事件被发送到列表视图时,它的 touchMode 卡在 (2) 和 (5) 之间,导致它记住它在 [= 上的按下状态14=] 这导致了不正确的结果,即即使在运动完成时,按下状态仍然可见。

我一开始就不清楚为什么会出现这个问题,因为我总是将事件从 TouchListener 发送到 ListView

无论如何现在解决这种情况 -

当我的 GestureDetector 识别出一个手势时,它将 return 为真,所以我所要做的就是当 GestureDetector return 为真时,只需更改 MotionEventACTION_CANCEL 的操作并将其发送给 ListView 瞧,问题解决了。