ListView如何清除选择[重复]
Posted
技术标签:
【中文标题】ListView如何清除选择[重复]【英文标题】:ListView How to clear selection [duplicate] 【发布时间】:2015-10-03 12:00:20 【问题描述】:所以我在列表视图上有一个选择器,其中每行有 2 个text views
,每个文本视图都有另一个同步选择器(相同状态的不同可绘制对象:activated
和 pressed
)名单。我的逻辑是,当我在列表视图中检测到某个项目的一扔时,我会临时更改该视图的背景颜色,并在 500 毫秒后将其设置回透明。
但是,当它重置时,有时子视图的按下状态设置为 true,有时视图具有正确的 bg,但内部 text views
始终对应于它们的 activated drawables
,即使按下状态为 false。
我似乎不知道如何纠正这种行为。非常感谢任何帮助,这件事让我发疯了。
我尝试清除无济于事的选择,我什至尝试显式强制子视图为其激活状态和按下状态设置为 false 也不起作用。我真的用尽了这个选项。
【问题讨论】:
你试过ListView.clearChoices();
吗?
@Machado 是的,这是我尝试的第一件事
您是否尝试在列表视图上发布更新?类似 getListView().post(new Runnable() @Override public void run() //do stuff here );
@RamandeepNanda nope 这也不起作用,因为当活动恢复时它再次在子视图上绘制一个选择器(除非我滚动列表)
【参考方案1】:
因此,在花了很多时间分析 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)之间,导致它记住motionView(Child view)
上的按下状态,这导致了不正确的结果即,即使动作完成,按下状态也是可见的。
我无法弄清楚为什么会出现这个问题,因为我总是将事件从我的TouchListener
发送到ListView
。
无论如何,现在解决这种情况 -
当我的GestureDetector
识别出一个手势时,它会返回真,所以我所要做的就是当GestureDetector
返回真时,只需将MotionEvent
的操作更改为ACTION_CANCEL
并将其发送到ListView
瞧,问题解决了。
【讨论】:
以上是关于ListView如何清除选择[重复]的主要内容,如果未能解决你的问题,请参考以下文章