onActivityResult()过早调用

时间:2010-07-28 16:15:01

标签: android android-activity

我从我的工作人员活动开始Activity({1}}的后代),如下所示:

PreferenceActivity

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 1458) loadInfo(); } void showSettingsDialog() { startActivityForResult(new Intent().setClass(this, MyConfigure.class), 1458); } 课程没有MyConfigure个来电。实际上,setResult()类除了使用MyConfigure加载首选项的OnCreate()之外没有任何代码。

现在,在addPreferencesFromResource活动运行后,onActivityResult requestCode提前1458调用MyConfigure。测试1.6和2.1仿真器以及2.1设备。在setResult()某处隐藏了PreferenceActivity的电话吗?或者如何解释这个过早的电话呢?

5 个答案:

答案 0 :(得分:249)

通过将启动模式更改为singleTop

来解决此问题
    <activity
        android:name=".MainActivity"
        android:launchMode="singleTop">

Android中存在一个错误/功能(?),会立即报告Activity的结果(尚未设置),声明为singleTask(尽管活动继续运行) )。如果我们将父活动的launchModesingleTask更改为singleTop,则一切都按预期工作 - 结果仅在活动结束后报告。虽然这种行为有一定的解释(只有一个singleTask活动可以存在,并且可能会发生多个服务员),但这对我来说仍然是一个不合逻辑的限制。

答案 1 :(得分:16)

我在调用@WebServlet("/testServlet") public class JavaServletTest extends HttpServlet { /* ... */ } 之前删除intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);后解决了我的问题。

答案 2 :(得分:4)

我刚从我的Activity中删除了所有自定义的“android:launchMode”,一切都像魅力一样。当你不完全清楚知道Android是什么时,改变这一点并不是一个好主意...... Android在这方面有点棘手。

答案 3 :(得分:1)

当意图设置Intent.FLAG_RECEIVER_FOREGROUND标志时,这发生在我身上。

(是的,那个标志与活动无关,但是作为a different problem的霰弹枪解决方案的一部分,我在我的所有意图中都拥有它。)

答案 4 :(得分:-1)

再次像Mayra的评论一样,setResult()与您的问题无关。出于某种原因,MyConfigure类完成了自身,当它发生时PreferenceActivity只假设可能有MyConfigure的结果,因为这就是你编写代码的方式。

当您强制退回以startActivityForResult() ...

开头的所有活动时,也会发生这种情况

所以,我认为最好关注为什么你的MyConfigure课程被强行完成。