2016-02-12 3 views
1

В моем методе onCreate() я подключил сенсорный исполнитель и жестикулятор.Android: DoubleTap не работает после изменения ориентации

Когда я дублирую свою строку заголовка в портретном режиме, все работает нормально. Но когда я поворачиваю свой экран в альбомный режим, двойное нажатие больше не обнаруживается. Однако слушателей все еще называют. И когда я поворачиваю свой экран обратно в портретный режим, двойное нажатие снова работает.

Мои Слушателей:

//Add double click gesture listener to Title Bar. 
     final GestureDetector gestureDetector = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener() { 
      public boolean onDoubleTap(MotionEvent e) { 
       myMethod(); 
       return true; 
      } 
     }); 
     TextView tv = (TextView) findViewById(R.id.tv_title); 
     tv.setOnTouchListener(new OnTouchListener() { 
      public boolean onTouch(View v, MotionEvent event) { 
       return gestureDetector.onTouchEvent(event); 
      } 
     }); 
+0

Добавление 'public void onLongPress (MotionEvent e)' работает в обеих ориентациях – Mcloving

+0

вы используете метод: 'public void onConfigurationChanged (Configuration newConfig) {'? если это так ... устанавливают новый contentView? Причина изменения ориентации перезапускает активность, поэтому ваша строка заголовка контента, скорее всего, не будет найдена – Strider

+0

Пожалуйста, покажите нам еще код – Strider

ответ

2

Поняв, что Длинное нажатие всегда вызывается, это дало мне больше возможностей для нахождения существующего вопроса/ответа.

Я нашел это question. Однако ответ не был уместным в моей ситуации, он задал вопрос, правильно ли я применил OnTouchListener.

Переход к android docs Я заметил, что я должен вернуть истину, а не результат жеста. (OnLongClick возвращает void!), Который мог бы заставить его потреблять этот результат независимо.

Android Docs указать реализацию OnTouchListener следующим образом:

View myView = findViewById(R.id.my_view); 
myView.setOnTouchListener(new OnTouchListener() { 
    public boolean onTouch(View v, MotionEvent event) { 
     // ... Respond to touch events  
     return true; 
    } 
}); 

Изменение кода для следующих исправили проблему:

//Add double click gesture listener to Title Bar. 
    final GestureDetector gestureDetector = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener() { 
     public boolean onDoubleTap(MotionEvent e) { 
      myMethod(); 
      return true; 
     } 
    }); 
    TextView tv = (TextView) findViewById(R.id.tv_title); 
    tv.setOnTouchListener(new OnTouchListener() { 
     public boolean onTouch(View v, MotionEvent event) { 
      gestureDetector.onTouchEvent(event); 
      return true; // ADDED THIS 
     } 
    }); 

Почему это работает в портретном, но не пейзаж, однако , Я не знаю.

+1

Хорошо, что u нашел решение. – Strider

+0

@Strider благодарит за попытку помочь :) Все еще сбитый с толку, как он работает в одной ориентации. Однако это исправление работает в обоих. – Mcloving