onActivityResult()提前调用
我从我的工作人员活动开始Activity ( 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类没有任何代码,除了使用addPreferencesFromResource加载首选项的OnCreate() 。
现在,在MyConfigure活动运行之后, onActivityResult会以1458 requestCode过早调用。 testing1.6和2.1仿真器以及2.1设备。 是否有一个调用setResult()埋在PreferenceActivity某处? 或者如何解释这个过早的呼叫?
通过将启动模式更改为singleTop来singleTop :
<activity android:name=".MainActivity" android:launchMode="singleTop">
Android中有一个bug /function(?),立即报告Activity结果(尚未设置),声明为singleTask (尽pipe活动继续运行)。 如果我们将父活动的singleTask从singleTask为singleTop ,则一切按预期工作 – 只有在活动完成后才会报告结果。 虽然这种行为有一定的解释(只有一个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类被强制完成。