我正在使用按钮处理程序中的 startActivityForResult() 启动一个 Activity ,并且我的 onActivityResult() 被立即调用,甚至在目标 Activity 的 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 的其他地方,我看到有人报告了这个问题,解决方案是不对 list 中的 launchMode 使用 singeInstance。但我使用的是标准 . . .
<activity android:name="AddCommentActivity"
android:configChanges="orientation"
android:screenOrientation="portrait"
android:launchMode="standard"></activity>
提前感谢您的任何见解!
编辑: 我制作了一个简单的测试程序,当调用者(“启动器”)——带有 onActivityResult 的 Activity ——是一个单一实例并且被调用的 Activity (“发射器”)是标准的。即,
<activity android:name="Launcher"
android:screenOrientation="portrait"
android:launchMode="singleInstance"></activity>
<activity android:name="Launchee"
android:screenOrientation="portrait"
android:launchMode="standard"></activity>
这对我来说是一个问题,因为在真正的应用程序中,由于其他原因,被调用的必须是一个单一的实例,但它希望有按钮来启动其他 Activity 以请求用户输入。如果我不能使用 startActivityForResult,还能怎么做?
最佳答案
如果正在启动的 Activity 不在与启动它的 Activity 相同的任务中运行,则不能使用 startActivityForResult()
。这意味着这两个 Activity 都不能有 launchMode="singleInstance"
。如果您要求这两个 Activity 在不同的任务中运行,那么您需要使用不同的机制。 documentation for startActivityForResult()
sorta-kinda 暗示了这一点:
"For example, if the activity you are launching uses the singleTask launch mode, it will not run in your task and thus you will immediately receive a cancel result."
您可以做的是简单地使用 startActivity()
启动 Activity 并让被调用的 Activity 调用 startActivity()
返回您的 Activity,将数据发送回在它使用的 Intent
中作为附加项是必需的。
但是,您可能会考虑是否真的需要这些特殊的启动模式。一般而言,只有更换主屏幕和其他非常特殊的应用程序才需要它们。大多数使用 singleInstance
或 singleTask
启动模式的开发人员都没有正确使用它们。
关于android - onActivityResult 被立即调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15687322/