FLAG_ACTIVITY_CLEAR_TOP and onActivityResult

7

我有多个活动来管理一个连接(B => C => D)。如果该连接断开,它们都应该清除并根据原因(RESULT_USER_TERMINATED, RESULT_LOW_SIGNAL, RESULT_UNKOWN等)向A返回结果。

在A中我有

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

在B&C中


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个回答

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

这样,无论是哪个Activity(B、C、D)生成了预期的结果代码,它都会回传到你的Activity A。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接