2013-04-25 3 views
0

У меня есть макет, настроенный с прослушивателем жестов для OnTouchEvent(). Макет содержит listview, и я использую жесты для захвата идентификатора строки в списке. У меня есть следующий код -Android OnTouchEvent: Отладка InputEventConsistencyVerifier сообщения

itemsList.setOnTouchListener(new OnTouchListener() { 

     @Override 
     public boolean onTouch(View arg0, MotionEvent evt) { 
      // TODO Auto-generated method stub 
      // 
      int action = evt.getAction(); 
      final String DEBUG_TAG = "DEBUG"; 
      detector.onTouchEvent(evt); 
      switch(action) { 
       case (MotionEvent.ACTION_DOWN) : 
        Log.d(DEBUG_TAG,"Action was DOWN"); 
        return true; 
       case (MotionEvent.ACTION_MOVE) : 
        Log.d(DEBUG_TAG,"Action was MOVE"); 
        return true; 
       case (MotionEvent.ACTION_UP) : 
        Log.d(DEBUG_TAG,"Action was UP"); 
        return true; 
       case (MotionEvent.ACTION_CANCEL) : 
        Log.d(DEBUG_TAG,"Action was CANCEL"); 
        return true; 
       case (MotionEvent.ACTION_OUTSIDE) : 
        Log.d(DEBUG_TAG,"Movement occurred outside bounds " + 
          "of current screen element"); 
        return true;  
      } 

      return false; 
     } 

    }); 

детектор является экземпляром GestureDetector. Я в основном использую просто проведите по экрану влево или проведите по экрану правой кнопкой мыши в строке списка.

Всякий раз, когда я прокручиваю влево/вправо, я получаю 3 отладочных сообщения в Logcat (информацию или что-то посмотреть?).

D/InputEventConsistencyVerifier(24700): TouchEvent: ACTION_MOVE contained 1 pointers 
but there are currently 0 pointers down. 

D/InputEventConsistencyVerifier(24700): in [email protected] 

D/InputEventConsistencyVerifier(23596): 0: sent at 37751425150760, 
MotionEvent { action=ACTION_MOVE, id[0]=0, x[0]=39.00721, y[0]=28.526703, toolType[0]=TOOL_TYPE_FINGER, 
buttonState=0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=1, eventTime=37751425, 
downTime=37751133, deviceId=0, source=0x1002 } 

Есть также 4 отладочные сообщения от OnTouchListener -

Action was ACTION MOVE 
Action was ACTION MOVE 
Action was ACTION MOVE 
Action was ACTION UP 

Что соответствует движению красть, я считаю.

Основной класс активности простирается OnGestureListener, следовательно, имеет свои невыполненные методы, такие как onFling .. и т.д. и т.п.

Проблема заключается в том, что метод onFling вызывается только после того, как ACTION UP события, и когда это происходит аргумент, передаваемый методу mevt1 имеет значение null, а значение mevt2 не равно нулю. (Поведение по умолчанию?)

onFling (MotionEvent mevt1, MotionEvent mevt2, плавать velX, плавать Vely)

Метод использует mevt1 и, следовательно, это приводит к nullpointexception.

Я хочу знать, вызывает ли отладочные сообщения от InputEventConsistencyVerifier, и если кто-нибудь знает, если это вообще проблема?

ответ

0

вы должны вызвать

detector.onTouchEvent(evt) 

для каждого действия, а не только ACTION_MOVE

+0

К сожалению, ранее код я вставил был из моего сеанса отладки. Новый код обновлен. Мое приложение падает, когда я запускаю этот код. Я обнаружил, что если я тоже использовал onScroll(), результат будет таким же. i.e Сбой приложений. – sangameshk

+0

Почему вы всегда возвращаете истину? значение возвращаемого детектора – pskink

+0

Я не знаю, как, но я написал некоторые коды событий касания с нуля, перейдя к основам, и я больше не получаю ошибку, и все работает. Я считаю, что ошибка может быть вызвана неправильной обработкой событий касания в родительском представлении или дочернем (контекст Listview). – sangameshk

Смежные вопросы