在意外的时间调用onActivityResult()

时间:2011-12-10 22:02:57

标签: android android-activity

在我的主要活动中,我有:

    Intent settings_intent = new Intent(this, SettingsActivity.class);
    settings_intent.putExtra("SomeID", some_int);
    startActivityForResult(settings_intent, 1);

然后,在我的SettingsActivity中,我有:

@Override
public void onBackPressed() {
    super.onBackPressed();
    // pass back settings:
    Intent data = new Intent();
    data.putExtra("SomeThing", some_number);
    setResult(200, data);
    finish();
}

最后,我在主要活动中覆盖了以下内容:

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

然而,一旦我的“设置”活动开始,而不是在完成时,“被叫”烤面包就会发生。我现在已经花了很长时间。任何帮助表示赞赏。感谢。

2 个答案:

答案 0 :(得分:14)

您的设置活动很可能将其启动模式设置为清单中的singleTask。这会在致电startActivityForResult()时立即取消响应。

  

请注意,此方法只应与Intent协议一起使用   被定义为返回结果。在其他协议中(例如   ACTION_MAIN或ACTION_VIEW),你可能无法得到结果   期望。例如,如果您启动的活动使用了   singleTask启动模式,它不会在你的任务中运行,因此你会   立即收到取消结果。

来自startActivityForResult() documentation

答案 1 :(得分:-1)

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(requestCode==1)
        makeToast("called");
    super.onActivityResult(requestCode, resultCode, data);
}