我有三个 Activity ,我们称之为 Activity A、 Activity B 和 Activity C
首先,我在 Activity A 中,并使用 startActivityForResult 启动 QR 扫描仪( Activity B),如下所示:
Intent i;
i = new Intent(this, QrActivity.class);
startActivityForResult(i, 1);
一旦 Activity B 打开,这是处理结果并返回到上一个 Activity 的代码:
public void handleDecode(Result rawResult, Bitmap barcode)
{
if (rawResult != null) {
String textResult = rawResult.getText();
if (textResult != null) {
Intent returnIntent = new Intent();
returnIntent.putExtra("result", textResult);
setResult(RESULT_OK,returnIntent);
finish();
}
//rest of the code
现在工作完全正常,一旦再次打开 Activity A,一切都会正常工作。它是这样的:A --> B --> A
当我尝试这样做时,问题就出现了:A --> C --> B --> A
用户有两个选择,要么从 Activity A 启动 Activity B(qr 扫描仪),要么从 Activity C 启动。即使用户从 Activity C 访问 Activity B,我始终希望使用 Activity A 处理 Activity B 结果。
一旦我从 Activity C 打开 Activity B(qr 扫描仪),这就是我尝试解决它的方法:
当调用 Activity B 时,我在 Activity C 上调用 finish():
Intent in;
in = new Intent(this, QrActivity.class);
startActivityForResult(in, 1);
finish();
并且在 Activity B 中,而不是
Intent returnIntent = new Intent();
我将 Intent 设置为:
Intent returnIntent = new Intent(QrActivity.this, CheckpointsActivity.class);
返回到 Activity A 后,什么也没有发生,就像 Activity B 从未打开一样,当从 Activity C 启动 Activity B 时,它似乎没有得到结果。
任何形式的帮助将不胜感激!我知道这很令人困惑,但如果您愿意,我可以添加更多详细信息。
最佳答案
这不是 startActivityForResult()
的工作原理。您最好将数据保存在 SharedPreferences 或其他地方。
您也可以使用 startActivityForResult()
从 A 启动 ActivityC
,然后执行相同的操作从 C 启动 B(尚未完成 C),然后传回你想要传递给 A 的结果。所以它会是这样的
A --> C --> B(完成)--> C(完成)--> A
使用startActivityForResult()
启动C和B,并使用setResult()
将结果返回到C和B的onActivityResult()
关于java - startActivityForResult 包含三个 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20387659/