FLAG_ACTIVITY_CLEAR_TOP和onActivityResult

fir*_*ice 6 android android-intent android-activity

我有多个管理连接的活动(B => C => D).如果该连接丢失,它们应该全部清除并将结果返回给A,具体取决于原因(RESULT_USER_TERMINATED, RESULT_LOW_SIGNAL, RESULT_UNKOWN等等)

在AI有

Intent intent = new Intent(this, B.class);
startActivityForResult(intent, REQUEST_EXIT_STATUS);
Run Code Online (Sandbox Code Playgroud)

在B&C

Intent intent = new Intent(this, C.class);
intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
startActivity(myIntent);
Run Code Online (Sandbox Code Playgroud)

IN D.

Intent intent = new Intent(this, A.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
setResult(ConnectActivity.RESULT_USER_TERMINATED);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

这不起作用.相反,A得到RESULT_CANCELED.我怎样才能按预期工作?或者,是否有更好的方法来实现相同的结果?

The*_*eIT 2

我建议将结果传递回堆栈而不是使用Intent.FLAG_ACTIVITY_FORWARD_RESULT,这样每个新的 Activity B、C、D 都会针对结果启动,并且每个 Activity 都会实现 onActivityResult 并简单地将结果向下转发,例如:

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

    setResult(resultCode);
    finish();
}
Run Code Online (Sandbox Code Playgroud)

这样,无论哪个活动(B、C、D)生成了预期的结果代码,它都会返回到您的活动 A。