立即调用onActivityResult

时间:2013-03-28 16:34:48

标签: android

我正在使用来自按钮处理程序的startActivityForResult()启动一个活动,并且我的onActivityResult()被称为立即,甚至在命中目标活动的onCreate()之前。

public void onGraphNext (View target) {
    Intent i = new Intent(this, AddCommentActivity.class);
    startActivityForResult(i,6);    // 6 is arbitrary request code               
}    

。 。 。

protected void onActivityResult(int requestCode, int resultCode,
        Intent returnData) {
   if  ( (resultCode == RESULT_OK) && (requestCode == 6) ) {
   Bundle extras = returnData.getExtras();
   comment = extras.getString("comment");
     }
} 

返回的结果代码是0,请求代码是6.在StackOverflow的其他地方,我看到有人报告这个问题,解决方案是不在清单中使用singeInstance作为launchMode。但我正在使用标准。 。 。

<activity android:name="AddCommentActivity"
          android:configChanges="orientation"
          android:screenOrientation="portrait"
          android:launchMode="standard"></activity>  

提前感谢任何见解!

编辑:我制作了一个简单的测试程序,当调用者(“启动器”) - onActivityResult的活动 - 是一个singleInstance并且调用了Activity时,我可以可靠地重现问题。 launchee“)是标准的。即,

<activity android:name="Launcher"
          android:screenOrientation="portrait"
          android:launchMode="singleInstance"></activity> 

<activity android:name="Launchee"
          android:screenOrientation="portrait"
          android:launchMode="standard"></activity>  

这对我来说是一个问题,因为在真正的应用程序中,由于其他原因,被调用者必须是singleInstance,但它希望有按钮来启动其他活动以请求用户输入。如果我不能使用startActivityForResult,怎么办呢?

1 个答案:

答案 0 :(得分:11)

如果正在启动的活动未在与启动它的活动相同的任务中运行,则无法使用startActivityForResult()。这意味着这两个活动都不能launchMode="singleInstance"。如果您要求这两个活动在不同的任务中运行,那么您需要使用不同的机制。 documentation for startActivityForResult()有点提示:

  

“例如,如果您要启动的活动使用singleTask   启动模式,它不会在您的任务中运行,因此您将   立即收到取消结果。“

您可以使用startActivity()简单地启动活动,并让被叫活动调用startActivity()返回您的活动,并根据需要发送数据作为Intent中的附加内容它使用。

但是,您可能会考虑是否真的需要这些特殊的launchModes。一般来说,它们仅适用于HOME屏幕更换和其他非常特殊的应用。大多数使用singleInstancesingleTask启动模式的开发人员都使用错误。