我从我的工作人员活动开始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
的电话吗?或者如何解释这个过早的电话呢?
答案 0 :(得分:249)
通过将启动模式更改为singleTop
:
<activity
android:name=".MainActivity"
android:launchMode="singleTop">
Android中存在一个错误/功能(?),会立即报告Activity
的结果(尚未设置),声明为singleTask
(尽管活动继续运行) )。如果我们将父活动的launchMode
从singleTask
更改为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
课程被强行完成。