Нажатие кнопки возврата Android Возвращает к двум действиям

#android

#Android

Вопрос:

Это может показаться простым, но я так озадачен этим. Я искал, но не нашел никакого решения.

Мой вопрос: как вернуться к двум действиям при нажатии кнопки «Назад»? Например, так: позвольте мне сказать, что у меня есть действия A, B и C (A -> B -> C). Чего я хочу добиться, так это когда я выполняю действие C и нажимаю кнопку «Назад», это должно вернуть меня к действию A. Когда я нахожусь на B и нажимаю назад, это тоже должно вернуть меня к A.

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

Спасибо

Ответ №1:

Возможным решением является вызов startActivityForResult() из действия B, так что при обратном вызове созданного действия C предыдущее действие B также завершается. Функция обратного вызова вызывается onActivityResult() , и в этом случае вы хотите вызвать finish() .

Пример:

ActivityB:

 Intent i = new Intent(this, ActivityC.class);
startActivityForResult(i, 0);

...

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    this.finish();
}
 

ActivityC:

 //do stuff
 

Таким образом, когда вы нажимаете кнопку назад (или вызываете функцию finish()) в ActivityC, она будет вызывать функцию onActivityResult() ActivityB и завершит их оба.

Комментарии:

1. Да, я попробую это сделать. Я вернусь для ответа. Спасибо!

2. Да, это работает, спасибо. Я проведу дальнейшее исследование этого метода, спасибо!

3. Я рад, что все работает так, как вы задумали 🙂 Мне не нравится возиться со стеком действий, поэтому это решение позволяет обойти это.

Ответ №2:

Вы можете переопределить метод onBackPressed и отправить намерение для нужного вам действия.

 @Override
public void onBackPressed()
{
     // code here to send intent to the activity A
}
 

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

Комментарии:

1. Я тоже думал об этом раньше, но это означает, что я должен указать имя класса activity в intent, о котором я заявлял ранее, что приложение должно записывать себя. Спасибо

Ответ №3:

вы можете завершить действие B, когда вы запускаете намерение для действия C, тогда в стеке действий будет действие A, а при повторном нажатии на действие C будет отображаться действие A.

просто переопределите onBackPressed в Activity C и завершите () его.

Комментарии:

1. вы можете сделать это, если вам не требуется, чтобы действие B находилось в стеке действий для повторного использования.

Ответ №4:

Вы можете вызвать действие, к которому хотите вернуться, со специальным флагом (FLAG_ACTIVITY_CLEAR_TOP) из вашего onBackButtonPressed, который пропустит / удалит другие промежуточные действия. Таким образом, вы можете вернуться от C к A.

См.: http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP

Я думаю, что это лучше, чем возиться с finish() или запускать действие для получения результата, когда нет результата для возврата.

Ответ №5:

A -> B -> C

 Intent intent = new Intent(this, A.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
 

Это запустит новое намерение Activity A и очистит все остальные действия из стека.