2

我有两个活动,我们称它们为 A 和 B。

A 是可以从应用程序中的两个位置启动的活动。我希望能够知道 A 是从位置 1 还是位置 2 开始的,所以在 BI 调用 A 中是这样的:

Intent i = new Intent(B.this, A.class);
i.putExtra("code", code);
startActivityForResult(i, code);

code是一个值为 1 的 int。)

在 AI 的 onCreate 方法中这样做:

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    Intent i = getIntent();
    Bundle extras = i.getExtras();
    if(extras != null)
    {
        int code = extras.getInt("code");
        if(code == 1)
        {
            ClearReleasesCache(); // just a private method of A
            setResult(1, i);                
            finish();
            return;
        }
    }

    // do everything else as usual
    setContentView...
}

现在,问题是这样的(我在调试时注意到了):

当我从 B 启动 A 时,我希望 A完成,如代码所示。当我从另一个不是 B 的活动中启动 A 时,我希望它像往常一样运行(确实如此)。但是在这里什么finish()也不return做 - 我可以看到在调试返回调用后,它会跳回到 onCreate,它不会关闭活动。

也就是说,onActivityResult()在 B 中永远不会被调用。

这里有什么问题?

4

5 回答 5

1

它怎么能在创建之前完成..一旦当前执行完成,它就会完成..不是突然发生在某事中间......这也很有意义..

于 2012-04-19T13:22:12.587 回答
0

尝试设置这个setResult(RESULT_OK, i);,当我传递一个与 RESULT_OK 不同的 resultCode 时,我遇到了类似的问题,在这种情况下,onActivityResult() 从未被调用

于 2012-04-19T13:24:14.583 回答
0

您还可以在finish() 之后添加return 语句。

于 2012-04-19T13:17:57.463 回答
0

您看起来正确 - 您是否检查过您的父 Activity 以查看它是否可能会重新启动带有 null 附加功能的 Activity?

您还可以稍微调整逻辑以进行修复:

Intent i = getIntent();
Bundle extras = i.getExtras();
if(extras != null && extras.getInt("code") == 1) {
    ClearReleasesCache(); // just a private method of A
    setResult(1, i);                
    finish();
    return;
} else {

    // do everything else as usual
    setContentView...
}

但是,如果您来自父(调用)活动的逻辑不正确,您很可能会得到相同的结果。

于 2012-04-19T14:21:57.627 回答
0
 if(extras == null || extras.getInt("code") != 1) {
         // do everything else as usual
 } else
       finish();

你不能只切换if条件吗?

编辑:但你确定 return 语句不起作用吗?

于 2012-04-19T13:15:44.077 回答