ListView如何清除选择
ListView How to clear selection
所以我在列表视图上有一个选择器,其中每行有 2 text views
,每个文本视图都有另一个同步选择器(相同状态的不同绘图:activated
和 pressed
) 与列表中的那个。我的逻辑是,当我在列表视图中检测到某项时,我会暂时更改该视图的背景颜色,并在 500 毫秒后将其设置回透明。
但是,当它重置时,有时子视图会将其按下状态设置为 true,有时两种方式都不会,视图具有正确的背景,但内部 text views
始终对应于它们的 activated drawables
甚至当按下状态为假时。
我似乎不知道如何纠正这种行为。非常感谢任何帮助,这件事让我抓狂。
我试过清除选择,但没有帮助,我什至试图明确强制子视图为其激活状态和按下状态设置 false,这也没有用。我真的 运行 对此无能为力。
因此,在花了很多时间分析 AbsListView
中幕后发生的事情之后,我找到了解决此问题的方法。首先更多关于导致这个问题的问题,AbsListView
有 8 个状态用于运动检测,即 -
- TOUCH_MODE_REST (-1)
- TOUCH_MODE_DOWN (0)
- TOUCH_MODE_TAP (1)
- TOUCH_MODE_DONE_WAITING (2)
- TOUCH_MODE_SCROLL (3)
- TOUCH_MODE_FLING (4)
- TOUCH_MODE_OVERSCROLL (5)
- TOUCH_MODE_OVERFLING (6)
并且当 ACTION_UP
事件被发送到列表视图时,它的 touchMode
卡在 (2) 和 (5) 之间,导致它记住它在 [= 上的按下状态14=] 这导致了不正确的结果,即即使在运动完成时,按下状态仍然可见。
我一开始就不清楚为什么会出现这个问题,因为我总是将事件从 TouchListener
发送到 ListView
。
无论如何现在解决这种情况 -
当我的 GestureDetector
识别出一个手势时,它将 return 为真,所以我所要做的就是当 GestureDetector
return 为真时,只需更改 MotionEvent
对 ACTION_CANCEL
的操作并将其发送给 ListView
瞧,问题解决了。
所以我在列表视图上有一个选择器,其中每行有 2 text views
,每个文本视图都有另一个同步选择器(相同状态的不同绘图:activated
和 pressed
) 与列表中的那个。我的逻辑是,当我在列表视图中检测到某项时,我会暂时更改该视图的背景颜色,并在 500 毫秒后将其设置回透明。
但是,当它重置时,有时子视图会将其按下状态设置为 true,有时两种方式都不会,视图具有正确的背景,但内部 text views
始终对应于它们的 activated drawables
甚至当按下状态为假时。
我似乎不知道如何纠正这种行为。非常感谢任何帮助,这件事让我抓狂。
我试过清除选择,但没有帮助,我什至试图明确强制子视图为其激活状态和按下状态设置 false,这也没有用。我真的 运行 对此无能为力。
因此,在花了很多时间分析 AbsListView
中幕后发生的事情之后,我找到了解决此问题的方法。首先更多关于导致这个问题的问题,AbsListView
有 8 个状态用于运动检测,即 -
- TOUCH_MODE_REST (-1)
- TOUCH_MODE_DOWN (0)
- TOUCH_MODE_TAP (1)
- TOUCH_MODE_DONE_WAITING (2)
- TOUCH_MODE_SCROLL (3)
- TOUCH_MODE_FLING (4)
- TOUCH_MODE_OVERSCROLL (5)
- TOUCH_MODE_OVERFLING (6)
并且当 ACTION_UP
事件被发送到列表视图时,它的 touchMode
卡在 (2) 和 (5) 之间,导致它记住它在 [= 上的按下状态14=] 这导致了不正确的结果,即即使在运动完成时,按下状态仍然可见。
我一开始就不清楚为什么会出现这个问题,因为我总是将事件从 TouchListener
发送到 ListView
。
无论如何现在解决这种情况 -
当我的 GestureDetector
识别出一个手势时,它将 return 为真,所以我所要做的就是当 GestureDetector
return 为真时,只需更改 MotionEvent
对 ACTION_CANCEL
的操作并将其发送给 ListView
瞧,问题解决了。