Могу ли я заставить кнопку "Назад Android" вернуться на два этапа в стек активности?
Я знаю, что я могу переопределить метод onKeyDown
, но я хочу, чтобы Back, чтобы сделать это, просто дважды!
Ответы
Ответ 1
FirstActivity
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivity(intent);
SecondActivity
int REQUEST_CODE = 123
Intent intent = new Intent(SecondActivity.this, ThirdActivity.class);
startActivityForResult(intent, REQUEST_CODE);
(чтобы сделать эту педагогику, есть больше кода для этой деятельности ниже)
ThirdActivity
@Override
public void onBackPressed() {
// Semi ugly way of supporting that back button takes us back two activites instead of the usual one.
setResultOkSoSecondActivityWontBeShown();
finish();
}
private void setResultOkSoSecondActivityWontBeShown() {
Intent intent = new Intent();
if (getParent() == null) {
setResult(Activity.RESULT_OK, intent);
} else {
getParent().setResult(Activity.RESULT_OK, intent);
}
}
SecondActivity (снова)
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 123) {
if (resultCode == RESULT_OK) {
finish();
}
}
}
Ответ 2
Я думаю об этом так:
A -> B -> C
Действия A, B, C.
Вы не можете делать обратную ошибку дважды, так как первый onKeyDown()
будет выполнен в C, а второй должен быть выполнен в B.
Я не знаю, почему вы пытаетесь это сделать, но вот несколько вариантов.
-
Используя android:noHistory
tag:
Возможно, ваша активность C делает то, что не нуждается в представлении, и почему вы хотите вернуться дважды.
-
Использование намерения. Что-то вроде:
Intent intent = new Intent(C.this, A.class);
startActivity(intent);
-
Используя finishActivityFromChild()
. Я никогда не пробовал, но похоже, что вы можете использовать его, чтобы решить, что делать на B, в зависимости от того, как C закончил.
Ответ 3
| * | Возврат одного экрана или конечного действия:
finish();
| * | Возврат нескольких экранов:
Вы можете вернуться к тому, какой когда-либо экран вам нужен, используя намерения и использовать флаги, чтобы предотвратить возврат на тот же экран:
Intent gotoScreenVar = new Intent(goFromScreenCls.this, goToScreenCls.class);
gotoScreenVar.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(gotoScreenVar);