android - onActivityResult 被立即调用

标签 android

我正在使用按钮处理程序中的 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 中作为附加项是必需的。

但是,您可能会考虑是否真的需要这些特殊的启动模式。一般而言,只有更换主屏幕和其他非常特殊的应用程序才需要它们。大多数使用 singleInstancesingleTask 启动模式的开发人员都没有正确使用它们。

关于android - onActivityResult 被立即调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15687322/

相关文章:

android如何隐藏或保护源代码中的url链接

android - 奇怪的Gradle错误-Android Studio

java - 为 WebView 强制移动版本的网站

android - 如何访问 LTE NAS 消息?

安卓 WebView : how do I control webView height?

适用于 API < 11 的 Android invalidateOptionsMenu()

java - 为什么用相同的数据填充 RecyclerView 行?

xml泄漏内存中的Android位图?

android - 如何知道android手机是否在某个建筑物名称内?

android - React Native 0.59 开发构建失败并出现 Metro 服务器错误