【问题标题】:ListView How to clear selection [duplicate]ListView如何清除选择[重复]
【发布时间】:2015-10-03 12:00:20
【问题描述】:

所以我在列表视图上有一个选择器,其中每行有 2 个text views,每个文本视图都有另一个同步选择器(相同状态的不同可绘制对象:activatedpressed)名单。我的逻辑是,当我在列表视图中检测到某个项目的一扔时,我会临时更改该视图的背景颜色,并在 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 这也不起作用,因为当活动恢复时它再次在子视图上绘制一个选择器(除非我滚动列表)

标签: android listview android-listview textview selector


【解决方案1】:

因此,在花了很多时间分析 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)之间,导致它记住motionView(Child view) 上的按下状态,这导致了不正确的结果即,即使动作完成,按下状态也是可见的。

我无法弄清楚为什么会出现这个问题,因为我总是将事件从我的TouchListener 发送到ListView

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多