活动开始于startActivityForResult()没有返回到调用Activity

时间:2012-03-13 17:29:08

标签: android android-activity

我有3项活动 - A B C

简而言之,活动A启动活动B,然后A也启动活动C并期望来自C的结果,但永远不会得到它。

以下是应用程序工作流程:

  1. 活动A在应用启动时启动,并在onCreate中启动活动B(不是结果,只是startActivity())。

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        startActivity(new Intent(getApplicationContext(), ActivityB.class));
    }
    
  2. 活动A然后也会在代码中启动活动C,这次使用startActivityForResult()获得结果,活动A也有onActivityResult。

    Intent intent = new Intent(getApplicationContext(), ActivityC.class);
    startActivityForResult(intent, 0);
    

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
       ...
    }
    
  3. 活动C使用setResult()和finish()返回一些数据,这些数据应该返回到活动A,因为活动A调用了startActivityForResult()。

    Intent intent = new Intent();
    intent.putExtra("encryption", encryption);
    setResult(56, intent);
    finish();
    
  4. 但是工作流程在步骤3中保持沉默 - 活动A的onActivityResult永远不会被调用(也不是B' s),即使活动A是一个开始C为结果。不确定活动B是否妨碍了A和C的沟通,或者问题可能是什么。非常感谢任何帮助。

3 个答案:

答案 0 :(得分:21)

我从来没有能够让它工作,所以我最终使用Handler来将数据返回到必要的Activity。

UPDATE :再次遇到此问题后,我发现这个问题无法解决的真正原因是因为我在清单中有android:noHistory="true"来调用/接收活动A.删除android:noHistory="true"修复它,但如果你需要它,那么处理程序是一个很好的解决方法。

答案 1 :(得分:1)

我认为你不应该在意图中使用getApplicationContext()

来自开发者网站。

getApplicationContext()
Return the context of the single, global Application object of the current process.

当你startActivityForResult()时,它会尝试返回意图中指定的活动,而这个活动是作为全局应用程序上下文提供的。

如果您有一个ActivityB,那么您应该将其称为

Intent intent = new Intent(ActivityB.this, ActivityC.class);
startActivityForResult(intent, 0);

然后,当ActivityC完成时,它将尝试返回ActivityB。

答案 2 :(得分:-2)

你可以尝试一下:

if (getParent() == null) {
setResult(RESULT_OK, dataTobePassback);
} else {
getParent().setResult(RESULT_OK, dataTobePassback);
}

dataTobePassbackIntent,其中包含您可能需要传递回调用活动的内容