onActivityResult()提前调用

我从我的工作人员活动开始ActivityPreferenceActivity后裔),如下所示:

 @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类没有任何代码,除了使用addPreferencesFromResource加载首选项的OnCreate()

现在,在MyConfigure活动运行之后, onActivityResult会以1458 requestCode过早调用。 testing1.6和2.1仿真器以及2.1设备。 是否有一个调用setResult()埋在PreferenceActivity某处? 或者如何解释这个过早的呼叫?

通过将启动模式更改为singleTopsingleTop

  <activity android:name=".MainActivity" android:launchMode="singleTop"> 

Android中有一个bug /function(?),立即报告Activity结果(尚未设置),声明为singleTask (尽pipe活动继续运行)。 如果我们将父活动的singleTasksingleTasksingleTop ,则一切按预期工作 – 只有在活动完成后才会报告结果。 虽然这种行为有一定的解释(只有一个singleTask活动可以存在,并可能发生多个服务器),但这对我来说仍然是一个不合逻辑的限制。

删除intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);后,我解决了我的问题intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 在调用fragment.startActivityForResult(intent, 0);

我只是从我的活动中删除了所有我自定义的“android:launchMode”,一切都像魅力一样。 这并不是一个好主意,当你不知道Android究竟是什么理解的时候… Android在这方面有点棘手。

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

(是的,这个标志不是与活动相关的,但是作为霰弹枪解决不同问题的一部分,我把它作为我的所有意图。)

同样在Mayra的评论中, setResult()与你的问题没有任何关系。 出于某种原因, MyConfigure类完成自己,当它发生PreferenceActivity只是假设可能有一个来自MyConfigure的结果,因为这就是你写代码的方式。

当你强制执行startActivityForResult()开始的任何活动时,也会发生这种情况。

所以,我认为最好把重点放在为什么你的MyConfigure类被强制完成。