为什么android中的ListView偶尔不会触发操作

为什么android中的ListView偶尔不会触发操作,android,ontouchlistener,Android,Ontouchlistener,我正试图在我的ListView的onTouch()方法中做一些工作。问题是,有时我收到ACTION\u UP类型的MotionEvent,而之前没有收到ACTION\u DOWN,这完全破坏了我的应用程序。有人能解释一下有什么问题吗 下面是我的OnTouchListener的一些代码: @Override public boolean onTouch(final View v, MotionEvent event) { switch (event.getAction()) {

我正试图在我的
ListView
onTouch()方法中做一些工作。问题是,有时我收到
ACTION\u UP
类型的
MotionEvent
,而之前没有收到
ACTION\u DOWN
,这完全破坏了我的应用程序。有人能解释一下有什么问题吗

下面是我的
OnTouchListener的一些代码

@Override
public boolean onTouch(final View v, MotionEvent event) {

    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            Log.d("TAG", "ATCION_DOWN");        
            break;
        case MotionEvent.ACTION_MOVE:
            //Log.d("TAG", "ACTION_MOVE");
            break;
        case MotionEvent.ACTION_UP:
            Log.d("TAG", "ACTION_UP");
            break;
    }
    return false;
}
以下是我从日志中得到的信息:

  • 09-16 20:15:02.116 25661-25661/com.ulmaxy.morny D/TAG:ATCION_DOWN 09-16 20:15:02.186 25661-25661/com.ulmaxy.morny D/TAG:ACTION\u UP 09-16 20:15:02.846 25661-25661/com.ulmaxy.morny D/TAG:ATCION_DOWN 09-16 20:15:02.916 25661-25661/com.ulmaxy.morny D/TAG:ACTION\u UP 09-16 20:15:03.586 25661-25661/com.ulmaxy.morny D/TAG:ACTION\u UP 09-16 20:15:04.166 25661-25661/com.ulmaxy.morny D/TAG:ATCION_DOWN 09-16 20:15:04.276 25661-25661/com.ulmaxy.morny D/TAG:ACTION\u UP 09-16 20:15:05.316 25661-25661/com.ulmaxy.morny D/TAG:ACTION\u UP 09-16 20:15:06.086 25661-25661/com.ulmaxy.morny D/TAG:ACTION\u UP 09-16 20:15:07.046 25661-25661/com.ulmaxy.morny D/TAG:ACTION\u UP 09-16 20:15:08.136 25661-25661/com.ulmaxy.morny D/TAG:ATCION_DOWN 09-16 20:15:08.256 25661-25661/com.ulmaxy.morny D/TAG:ACTION\u UP 09-16 20:15:09.206 25661-25661/com.ulmaxy.morny D/TAG:ACTION\u UP

    • 您的列表视图是否在滚动视图中?如果是这样,有时ScrollView可以“窃取”动作。 编辑:一开始不小心称为ScrollView SpinnerView,我的不好


      EDIT2:问题显然是子视图“窃取”了事件(因为事件被传递给布局层次结构中最底层的子视图)。你可以通过在他们的事件中返回false来解决这个问题

      否,
      ListView
      RelativeLayout
      中。您是否尝试过返回true而不是false?很抱歉,我不得不将此作为答案发布,我无法评论不是我的帖子@ulmaxyWell,如果我返回true,那么事件被认为是由
      OnTouch()
      处理的,因此我需要实现此方法中的所有逻辑,例如垂直滚动等,我显然不想这样做。从一个动作中返回false意味着你不想要这个事件,其他视图将有机会处理它。如果它没有任何重叠视图,则父视图将处理它@Ulmaxyth这是真的,但不知何故,我可以接收到
      操作向上
      ,即使在处理
      操作向下
      后返回false后也是如此,这相当令人困惑。无论如何,我只是试图从
      ACTION\u DOWN
      ACTION\u MOVE
      返回true,但我仍然有问题@oliverap你是否覆盖了其他
      视图
      onTouchEvent()
      。如果您确保返回正确(无论是
      true
      还是
      false
      )。@Abbas我没有这样做,但我在
      ListView
      的项中有另一个视图,它们的
      onClickListener
      。虽然我确信当ACTION_DOWN没有出现时,我不会点击这些视图。