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
类被强制完成。