Android: DoubleTap не работает после изменения ориентации

Я прикрепил сенсорный и жестовый прослушиватель в своем методе onCreate().

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

Мои слушатели:

 //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);
            }
        });

person Mcloving    schedule 12.02.2016    source источник
comment
Добавление public void onLongPress(MotionEvent e) работает в обеих ориентациях   -  person Mcloving    schedule 12.02.2016
comment
вы используете метод: public void onConfigurationChanged(Configuration newConfig) { ? если да .... вы устанавливаете новый contentView? Причина изменения ориентации перезапускает активность, поэтому строка заголовка вашего контента, скорее всего, больше не будет найдена.   -  person Strider    schedule 12.02.2016
comment
Пожалуйста, покажите нам еще немного кода   -  person Strider    schedule 12.02.2016
comment
@Strider Определенно найден. поскольку жест все еще вызывается, а щелчок все еще срабатывает. так как он прикреплен к заголовку Found. Я заметил, что неважно, что я делаю, он думает, что я просто долго нажимал. ака, нажатие, двойной щелчок вызывают длительное нажатие.   -  person Mcloving    schedule 12.02.2016
comment
Ах, хорошо, я подумал, может быть, вы меняете раскладку. Но это не так.   -  person Strider    schedule 12.02.2016
comment
@Страйдер, спасибо за редактирование. Озадачен вопросом о том, что вызывает это :(   -  person Mcloving    schedule 12.02.2016


Ответы (1)


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

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

Перейдя к документам Android, я заметил, что, возможно, должен вернуть true, а не Результат жеста. (OnLongClick возвращает пустоту!), что, возможно, продолжало заставлять его потреблять этот результат независимо.

Документы Android определяют реализацию 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
       } 
  });

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

person Mcloving    schedule 12.02.2016
comment
Хорошо, что вы нашли решение. - person Strider; 12.02.2016
comment
@Strider, спасибо за попытку помочь :) Все еще не понимаю, как это работает в одной ориентации. Однако это исправление работает в обоих случаях. - person Mcloving; 12.02.2016