Android - onBackPressed () не работает - PullRequest
7 голосов
/ 24 августа 2010

У меня есть сборка приложений под Android 2.1, и я хочу переопределить кнопку возврата.

Я следовал примеру здесь:

http://android -developers.blogspot.com / 2009_12_01_archive.html

И мой код выглядит следующим образом:


    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event)  {
        if (Integer.parseInt(android.os.Build.VERSION.SDK) < 5
                && keyCode == KeyEvent.KEYCODE_BACK
                && event.getRepeatCount() == 0) {
            Log.d("CDA", "onKeyDown Called");
            onBackPressed();
        }

        return true;
    }

    @Override
    public void onBackPressed() {
    Log.d("CDA", "onBackPressed Called");
        Intent setIntent = new Intent(Intent.ACTION_MAIN);
        setIntent.addCategory(Intent.CATEGORY_HOME);
        setIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(setIntent); 

        return;
    }   

Он работает на устройствах до 2.x, но не работает на Hero с 2.1 update-1 и Nexus One с 2.2.

Есть ли что-то, чего мне не хватает в примере? Или кто-нибудь может указать, почему он не работает?

Я даже не нажимаю кнопку в logcat.

Ответы [ 3 ]

11 голосов
/ 24 августа 2010

Используете ли вы onKeyUp () ?

Используйте просто onKeyDown () в Android 1.x или onBackPressed () в Android2.x

4 голосов
/ 24 августа 2010

Некоторый быстрый поиск предполагает, что вы должны поместить перехват Back во время onKeyUp (): http://developer.android.com/sdk/android-2.0.html. Стоит попробовать.Следующий код прямо с сайта:

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK
            && event.getRepeatCount() == 0) {
        event.startTracking();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

public boolean onKeyUp(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.isTracking()
            && !event.isCanceled()) {
        // *** DO ACTION HERE ***
        return true;
    }
    return super.onKeyUp(keyCode, event);
}
0 голосов
/ 18 июня 2012

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

В onKeyDown() вызове метода

super.onKeyDown();

и в onBackPressed()

super.onBackPressed();
...