Android: startActivityForResult() с функцией кнопки НАЗАД

Я хотел бы начать новый activity для result с startActvityForResult(), но я хотел бы, чтобы кнопка back работала как обычно в новом действии.

В настоящее время, когда я вызываю новый Activity для результата, ничего не происходит, когда я нажимаю кнопку «Назад» в новом действии.

Я пробовал что-то вроде этого:

@Override
public void onBackPressed() {
    setResult(0);
    super.onBackPressed();
    finish();
}

в новом Activity, но это не сработало. По-прежнему ничего не происходит при нажатии кнопки «Назад».

Есть ли способ обойти это?

РЕДАКТИРОВАТЬ: я мог бы, конечно, загрузить последний Activity в onBackPressed() (можно?), но это похоже на довольно дрянной хак.

Ответ Алекса Ади решает мою проблему, но я до сих пор не понимаю, почему onBackPressed() не работает. Рабочий код сейчас примерно такой:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_BACK)) {
        setResult(1);
        finish();
    }
    return super.onKeyDown(keyCode, event);
}

Я мог бы использовать объяснение.


person Arnab Chakraborty    schedule 03.08.2011    source источник
comment
Вы пытались переопределить onKeyevent()   -  person Andro Selva    schedule 03.08.2011
comment
Я пытаюсь манипулировать поведением аппаратной кнопки «Назад», и я почти уверен, что метод onBackPressed() вызывается при нажатии кнопки «Назад».   -  person Arnab Chakraborty    schedule 03.08.2011
comment
Извини, бро, но это сработало :)   -  person Arnab Chakraborty    schedule 03.08.2011


Ответы (3)


Вы могли бы попробовать

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_BACK)) {
         finish();
    }
    return super.onKeyDown(keyCode, event);
}
person Community    schedule 03.08.2011
comment
Хотя можете ли вы сказать мне, почему onBackPressed не сработало? Странно не правда ли? - person Arnab Chakraborty; 03.08.2011
comment
Это зависит от того, какой телефон вы разрабатываете. Если вы разрабатываете на эмуляторе, onBackPressed должно работать. - person ; 03.08.2011
comment
Тогда странно, должно работать. На самом деле вы не должны переопределять его вообще. - person ; 03.08.2011
comment
Да, я тоже пробовал (не переопределяя), это тоже не сработало. На самом деле я переопределил его в первую очередь, потому что он не работал. - person Arnab Chakraborty; 03.08.2011
comment
но может ли кто-нибудь сказать мне, почему onbackpressed() не работает в этом случае?? - person Saad Bilal; 02.07.2014

Вам вообще не нужно переопределять поведение кнопки «Назад». По умолчанию, если пользователь нажмет кнопку «Назад», результатом будет Activity.RESULT_CANCELED.

person Brigham    schedule 03.08.2011
comment
Не работает, если я не обрабатываю событие. Он просто остается в текущем действии. - person Arnab Chakraborty; 03.08.2011
comment
Бригам прав, нажатие назад по умолчанию завершает текущее действие. Так что вся эта ерунда с переопределением функций событий не нужна. Делаете ли вы что-то в своей деятельности, чтобы предотвратить нормальную работу кнопки «Назад» в первую очередь? - person Josh; 03.08.2011
comment
У вас есть другой подкласс Activity между этим классом и классом Android Activity, который переопределяет onBackPressed? Это может быть причиной этого. - person Brigham; 04.08.2011

Попробуйте избавиться от строки, содержащей Finish().

person JVM    schedule 03.08.2011
comment
Пробовал. Ничего не изменилось. :( - person Arnab Chakraborty; 03.08.2011
comment
Тогда вы можете попробовать установить для параметра Result значение 0 вне этого метода по умолчанию. И затем, если одно из ваших условий выполнено, вы можете изменить его на 1. Таким образом, вам не нужно переопределять метод onBackPressed(). - person JVM; 03.08.2011