我正在从按钮处理程序中使用startActivityForResult()启动一个活动,甚至在目标活动的onCreate()被击中之前,onActivityResult()就被称为立即。
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的其他地方,我看到人们报告了这个问题,解决方案是在清单中不对launchMode使用singeInstance。但我用的是标准。。。
<activity android:name="AddCommentActivity"
android:configChanges="orientation"
android:screenOrientation="portrait"
android:launchMode="standard"></activity> 提前感谢您的任何见解!
编辑:I编写了一个简单的测试程序,当调用者("launcher") --带有onActivityResult的活动--是singleInstance并且正在调用的活动("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,还能怎么做呢?
发布于 2013-05-18 19:11:14
如果正在启动的活动与启动该活动的活动不在同一任务中运行,则不能使用startActivityForResult()。这意味着这两个活动都不能有launchMode="singleInstance"。如果您要求这两个活动在不同的任务中运行,那么您需要使用不同的机制。startActivityForResult()似乎暗示了这一点:
例如,如果您启动的活动使用singleTask启动模式,它将不会在您的任务中运行,因此您将立即收到取消结果。
您可以做的就是使用startActivity()启动活动,并让被调用的活动调用startActivity()返回到您的活动,并根据需要在它使用的Intent中发送数据。
但是,您可能会考虑是否真的需要这些特殊的launchModes。一般情况下,它们只适用于主屏幕替换和其他非常特殊的应用。大多数使用singleInstance或singleTask启动模式的开发人员都不正确地使用它们。
https://stackoverflow.com/questions/15687322
复制相似问题