Открытие дочернего просмотра обратно из scrollview

StackOverflow https://stackoverflow.com/questions/904376

  •  05-09-2019
  •  | 
  •  

Вопрос

У меня есть родитель ScrollView с дочерним представлением.Когда пользователь нажимает кнопку "Назад", я хочу, чтобы дочернее представление обрабатывало событие.Я попробовал пару вещей, но, похоже, ни одна из них не работает.Нажатие кнопки "Назад" прекращает действие.

public class GameScrollView extends ScrollView{

     public GameScrollView(Context context) {
          super(context);
     }
     @Override
     public boolean onInterceptTouchEvent (MotionEvent ev){
          return false;

     }
     @Override
     public boolean onKeyDown (int keyCode, KeyEvent event){
          return false;

     }
}

в дочернем представлении у меня есть следующий код

public class GameView extends View implements OnTouchListener, onKeyListener{

     public boolean onKey(View v, int keyCode, KeyEvent event){
          if(keyCode == KeyEvent.KEYCODE_BACK){
                    //do stuff
          }
          invalidate();
          return true;        
     }
}

В ScrollView Я также попытался переопределить dispatchKeyEventметод, возвращающий false, но это тоже не сработало.Что я здесь делаю не так?

Спасибо!

Это было полезно?

Решение 2

Я понял это.Причина, по которой это не работало, заключалась в том, что дочерний вид не имел фокуса.

Установка requestFocus() свойство в конструкторе дочернего представления устранило проблему.

Другие советы

@Override 
public boolean onKeyDown(int i, KeyEvent event) {

      if (i == KeyEvent.KEYCODE_BACK) {
          return true;
        else {
          super.onKeyDown(i, event);
          return true;
        }
      }
      return false;
    }

Кроме того, я думаю, вам пришлось бы перехватывать нажатие клавиши в вашем действии, а не в представлении.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top