正在调用错误活动中的onActivityResult

时间:2014-11-13 03:03:40

标签: android android-intent android-activity

基本上:活动A调用startActivityForResult,它启动活动B.此时,活动B应该回调活动A的onActivityResult方法。相反,活动B然后错误地回调活动C的onActivityResult方法。请注意,Activity B.getCallingActivity()按预期返回活动A.

更详细:

我有三项活动:

  • EditModuleActivity(活动A)

  • EditMotorActivity(活动B)

  • ConfigurationActivity(活动C)

在EditModuleActivity(活动A)中,我有以下代码:

private void launchIntentFromHere(){
    int requestCode = 101;
    Intent editMotorIntent = new Intent(context, EditMotorActivity.class);     
    editMotorIntent.putExtra(EditMotorActivity.EDIT_MOTOR_CONTROLLER, item);
    editMotorIntent.putExtra("requestCode", requestCode);
    setResult(RESULT_OK, editMotorIntent);
    startActivityForResult(editMotorIntent, requestCode);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    DbgLog.error("*************************** why is this never getting called?");
}

在EditMotorActivity(活动B)中,我有以下代码:

private void doThisThing(Object item){
    // blah blah build intent
    DbgLog.error("calling activity: " + getCallingActivity().toString()); // this prints out Activity A, which is what I expect.
    returnIntent.putExtra(EDIT_MOTOR_CONTROLLER, item);
    setResult(RESULT_OK, returnIntent); 
    finish();
}

ConfigurationActivity(活动C)中包含:

private void launchIntent(Object item){
    Intent editMotorIntent = new Intent(context, EditMotorActivity.class);
    editMotorIntent.putExtra(EditMotorActivity.EDIT_MOTOR_CONTROLLER, item);
    setResult(RESULT_OK, editMotorIntent); 
    startActivityForResult(editMotorIntent, 1);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // deals properly with the results
}

当我在EditModuleActivity中并启动EditMotorActivity时,会调用 ConfigurationActivity.onActivityResult 。相反,当我在EditModuleActivity中并且我启动EditMotorActivity时,应该调用EditModuleActivity.onActivityResult但是没有发生。

问题

  • 为什么onActivityResult被调用错误?

  • 如何在onActivityResult上调用权限?我的期望不正确吗?这还有什么用呢?

  • 如果错误的一个被调用,我该如何调用正确的?

答案我见过没有帮助

像这样:

   B
 /  \
A    C

不是这个:

X   Z
 \ /
  Y

3 个答案:

答案 0 :(得分:3)

我正在覆盖onStop方法:

@Override
public void onStop(){
  setResult(RESULT_CANCELED, new Intent());
  finish();
}

基本上,我并不了解Android Lifecycle的工作原理。我认为onStop()只会在一个Activity被杀死时被调用,我认为如果等待来自另一个Activity的响应它就不会被杀死。

所发生的事情是这样的: 活动C启动了活动A,它启动了活动B.当活动B启动时,调用了A.onStop()。然后,当活动B完成时,它(正确)尝试返回活动A,但活动A已经停止,因此它一直返回活动C.

答案 1 :(得分:1)

好的 - 很可能你引用了错误的“上下文”或对活动的静态引用或代码中其他地方的奇怪内容。

直接回答你的问题:

  1. 您的代码无法解释原因 - 如果可能,您需要发布更多代码。

  2. 您的期望是正确的。您似乎清楚地了解startActivityForResult的工作原理。您的参考资料也证明您知道自己在做什么。它没有“工作”任何其他方式......但这并不意味着你没有错误(见上面的“1”!)

  3. 如果您无法弄清楚出了什么问题,那么您可以随时调用您想要的活动(startActivity)传递您想要的意图,然后处理该意图。如果您在极少数情况下仍然得到奇怪的结果,您可能想要研究onNewIntent ...

答案 2 :(得分:1)

如果其他人有类似的问题(当startActivityForResult()返回错误的活动时,而不是调用它的那个),请看一下solution