Для A, B и C вы захотите вызвать startActivityForResult()
.Это позволяет получать уведомления о завершении запуска Activity
.
От A:
Intent i = new Intent(this, B.class);
startActivityForResult(i, B_ACTIVITY);
...
@Override
protected void onActivityResult (int requestCode, int resultCode, Intent data) {
if((resultCode == RESULT_OK) && (requestCode == B_ACTIVITY)) {
// handle success
}
}
От B (и аналогично от C)
Intent i = new Intent(this, C.class);
startActivityForResult(i, C_ACTIVITY);
...
@Override
protected void onActivityResult (int requestCode, int resultCode, Intent data) {
if((resultCode == RESULT_OK) && (requestCode == C_ACTIVITY)) {
setResult(RESULT_OK);
finish();
}
}
Когда вы закончите в D, позвоните setResult(RESULT_OK);
, затем finish()
, и все произойдет, как вы пожелаете.Кнопка «Назад» будет обработана правильно автоматически.