这是在调用Activity 中使用startActivityForResult 和覆盖onActivityResult 组合的完美候选。
假设您有Activity A,它以Activity B 开头(我们无法返回),它以Activity C 开头:
Activity A 会像现在一样调用Activity B。但是,Activity B 将调用startActivityForResult(Intent, int) 而不仅仅是startActivity(Intent)。这样,当我们从Activity C返回时,我们可以在Activity B上调用finish()并返回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() 时,您确保从Activity C 返回时将调用onActivityResult(),从而允许您结束Activity 并返回到Activity A。
您可以为状态提供更具体的操作(例如设置/检查结果代码(例如,如果它取消 (Activity.RESULT_CANCELED) 或成功 (Activity.RESULT_OK)),以便更好地确定调用 Activity 应该做什么做。
希望这有助于解释一下。
编辑:也是事后的想法,如果你没有机会想要回到活动 B,那么 @Kay 在触发活动 C 的 Intent 后调用 finish() 的解决方案将是最简单的方法。