FLAG_ACTIVITY_CLEAR_TOP和onActivityResult

时间:2013-09-03 00:10:15

标签: android android-intent android-activity

我有多个管理连接的活动( B => C => D )。如果该连接中断,则应清除并将结果返回 A ,具体取决于原因(RESULT_USER_TERMINATED, RESULT_LOW_SIGNAL, RESULT_UNKOWN等...)

在A中我有

Intent intent = new Intent(this, B.class);
startActivityForResult(intent, REQUEST_EXIT_STATUS);

在B& ç

Intent intent = new Intent(this, C.class);
intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
startActivity(myIntent);

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);

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

1 个答案:

答案 0 :(得分:1)

我建议将结果传回堆栈而不是使用Intent.FLAG_ACTIVITY_FORWARD_RESULT,这样每个新的Activity B,C,D都是为结果启动的,每个Activity都是在ActivityResult上实现的,只是简单地转发结果,例如:

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

    setResult(resultCode);
    finish();
}

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