Вы хотите startActivityForResult()
. Когда вы переходите от C
до D
, вместо использования startActivity()
используйте вместо этого startActivityForResult()
. Затем, когда вы хотите вернуться с D
до C
, вы используете setResult()
, который может включать объект Intent
с extras
, чтобы вернуться к C
.
Я не рекомендую сделать это в onBackPressed()
, если вы не имеете , потому что этого не будет, чего ожидает пользователь. Вместо этого вы должны вернуться с этими данными с таким событием, как щелчок Button
.
Итак, в C
вы сделаете что-то вроде
Intent i = new Intent(new Intent(C.this, D.class);
startActivityForResult(i, 0);
, затем в D
, когда вы будете готовы возвратить
Intent i = new Intent();
i.putExtra(); // insert your extras here
setResult(0, i);
, тогда, когда вы вернетесь к C
, вы введете этот метод (, взятый из Документов )
protected void onActivityResult(int requestCode, int resultCode,
Intent data) {
if (requestCode == PICK_CONTACT_REQUEST) {
if (resultCode == RESULT_OK) {
// A contact was picked. Here we will just display it
// to the user.
startActivity(new Intent(Intent.ACTION_VIEW, data));
/*
can also get the extra sent back through data
using data.getStringExtra("someKey");
assuming the extra was a String
*/
}
В некоторых случаях, когда startActivityForResult действительно не нужен или нецелесообразно изменять все вызовы startActivity для startActivityForResult.
Если нужен простой случай только начала предыдущей операции «снова», Рекомендация: Использовать флаг FLAG_ACTIVITY_CLEAR_TOP.
Если установлено, и запущенная деятельность уже запущена в текущая задача, то вместо запуска нового экземпляра этой активности все остальные действия поверх нее будут закрыты, и этот намерение будет передан в прежнюю деятельность (теперь сверху) как новый Intent.
Например, рассмотрите задачу, состоящую из действий: A, B, C, D. Если D вызывает startActivity () с намерением, который разрешает компонент активности B, то C и D будут завершены и B получит данное намерение, в результате чего стек теперь будет: A, B.
blockquote>Итак, этот пример
// From ActivityD Intent intent = new Intent(getApplicationContext(), ActivityB.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // The flag we wanted intent.putExtra(ActivityB.SOME_EXTRA_THAT_I_NEED_CHANGED, SomeValue); // Example of changing the intent to get something new.. startActivity(intent);
Где вы это получите новое намерение определяется режимом запуска и флагами, где он использовался для запуска (в данном случае нашего ActivityB).
Текущий исполняемый экземпляр действия B в приведенном выше примере либо получит новый вы начинаете здесь в методе onNewIntent () или сами закончите и перезапустите с новым намерением. Если он объявил свой режим запуска «множественным» (по умолчанию), и вы не установили FLAG_ACTIVITY_SINGLE_TOP в одном и том же намерении, он будет завершен и заново создан; для всех других режимов запуска, или если установлен FLAG_ACTIVITY_SINGLE_TOP, этот Intent будет доставлен на текущий экземпляр onNewIntent ().
blockquote>