Это идеальный кандидат для использования комбинации startActivityForResult
и переопределения onActivityResult
в вызове Activity
.
Если у вас есть Activity A
, который начинается Activity B
(который мы не можем вернуться к), который начинается Activity C
:
Activity A
позвонит Activity B
так, как вы сейчас находитесь. Activity B
, однако, назовет startActivityForResult(Intent, int)
вместо startActivity(Intent)
. Таким образом, когда мы вернемся из Activity C
, мы можем назвать finish()
на Activity B
и вернуться к Activity A
, например, так:
public class ActivityB extends Activity {
private static final int REQUEST_CODE_ACTIVITY_C = 1001;
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
if(requestCode == REQUEST_CODE_ACTIVITY_C) finish(); // If coming back from Activity C, finish()
}
private void openActivityC(){
Intent intent = new Intent(this, ActivityC.class);
startActivityForResult(intent, REQUEST_CODE_ACTIVITY_C);
}
}
Теперь, когда вы звоните openActivityC()
, вы гарантируя, что onActivityResult()
будет вызываться при возвращении из Activity C
, что позволяет вам закончить Activity
и вернуться к Activity A
.
Вы можете обеспечить еще более конкретные действия (например, настройка/проверка кода результата (например, если он отменен (Activity.RESULT_CANCELED
) или успешно (Activity.RESULT_OK
)) для состояний, чтобы лучше определить, что, что вызов Activity
должен делать.
Надеюсь, это поможет немного объяснить это.
Редактировать: Также, если нет никаких шансов, что вы когда-нибудь захотите вернуться к Activity B, тогда решение @Kay только что вызывается finish() после запуска Намерение для деятельности C было бы самым простым подходом.
call finish() когда вы вызываете намерение от субзависимости до субсубъективности – Kay
Зачем использовать вспомогательные действия, когда у вас есть фрагменты. С задним ходом было бы легко справиться. – Ryan