Не удается поймать событие возврата кнопки Android - PullRequest
5 голосов
/ 17 ноября 2011

Я пытаюсь поймать событие возврата для Android.Я знаю, что об этом уже много говорится в формах, однако мой код не работает в качестве примеров.Вот мой фрагмент кода для захвата события:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event){
    if(keyCode == KeyEvent.KEYCODE_BACK){
        Log.d(TAG, "back key captured");
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

Я также попытался это сделать:

@Override
public void onBackPressed(){
    Log.d(TAG, "in onBackPressed");
    finish();
}

Вывод LogCat, который вызвал любое событие, не отображается.Кто-нибудь знает возможную причину этого?

Спасибо.

Ответы [ 6 ]

17 голосов
/ 17 ноября 2011

Другим методом является переопределение метода public void onBackPressed().Это проще и легче сделать.

8 голосов
/ 17 ноября 2011

Чтобы получить событие клавиатуры, представление должно иметь фокус.Чтобы заставить это использовать:

view.setFocusableInTouchMode(True);
view.requestFocus();
2 голосов
/ 17 ноября 2011

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

1 голос
/ 29 января 2013

Моя ситуация может быть необычной, но у меня было точно такое же поведение, поэтому я решил поделиться с классом! Причина была в том, что внутри моего события onResume () для Activity я запускал другую операцию. Это действие заканчивалось само по себе до того, как на нем отображался какой-либо пользовательский интерфейс, но это означало, что «onResume» для моего основного действия непрерывно вызывался всякий раз, когда подэтап заканчивался, и события кнопки «назад», казалось, все исчезали в подэтапе.

1 голос
/ 17 ноября 2011

Это работает для меня

private long lastBackPressTime = 0;
    @Override
public void onBackPressed() {
    if (this.lastBackPressTime < System.currentTimeMillis() - 4000) {
        Toast.makeText(this, R.string.backButtonWarning, 4000).show();
        this.lastBackPressTime = System.currentTimeMillis();
    } else {
        super.onBackPressed();
    }
}

В последнее время я экспериментировал с ОГРОМНЫМ количеством проблем из-за плагина ADT, который генерирует файл ресурсов (R). Так что дважды проверьте, что вы очистили свой проект

0 голосов
/ 17 ноября 2011

Вот как я реализовал обработку события нажатия клавиши назад.

/**
   * onKeyDown method
   * 
   * Executes code depending on what keyCode is pressed.
   * 
   * @param int keyCode
   * @param KeyEvent
   *          event KeyEvent object
   * 
   * @return true if the code completes execution, false otherwise
   * 
   */
  @Override
  public boolean onKeyDown(int keyCode, KeyEvent event) {        
    switch (keyCode) {
    case KeyEvent.KEYCODE_BACK:
      Log.d(TAG, "back key captured");

      this.onBackPressed();

      //You could also use this.moveTaskToBack(true) to return to the Home screen

      return true;

    default:
      return super.onKeyDown(keyCode, event);
    }
  }// end onKeyDown
...