Java Android中的儿童活动

Java Android中的儿童活动,java,android,android-activity,android-manifest,Java,Android,Android Activity,Android Manifest,所以我有两个活动。主节点称为main,子节点称为child。单击主活动中的按钮时,会触发以下代码: Intent i = new Intent(Main.this, Child.class); Main.this.startActivity(i); 这将打开子活动 只要我调用finish()或按下子活动中的后退按钮而不是返回主活动,应用程序就会关闭。你能告诉我问题出在哪里吗:( 另外,通过反复试验,我发现如果编辑AndroidManifest.xml并添加 在Child的声明中,返回按钮和调用

所以我有两个活动。主节点称为main,子节点称为child。单击主活动中的按钮时,会触发以下代码:

Intent i = new Intent(Main.this, Child.class);
Main.this.startActivity(i);
这将打开子活动

只要我调用finish()或按下子活动中的后退按钮而不是返回主活动,应用程序就会关闭。你能告诉我问题出在哪里吗:(

另外,通过反复试验,我发现如果编辑AndroidManifest.xml并添加

Child的声明中,返回按钮和调用finish()的行为与预期一致:关闭子活动并使主活动聚焦。问题是,当我开始键入EditText时,屏幕开始闪烁(相当奇怪)。因此,我无法将其用作对话框。我的主要活动使用相机,因此可能会产生问题。尽管在启动子活动时,会触发onPause事件,并在调用onResume之前停止相机

编辑:

因此,我尝试使用startActivityForResult并添加

Toast.makeText(this, "onPause", Toast.LENGTH_SHORT).show();
onPause和一个类似于onResume的方法。当孩子返回时,onResume不会被触发。我甚至覆盖了onActivityResult甚至没有被触发。:(太奇怪了

我想我找到了问题,但我自己解决不了

当激活子活动时,主活动中会调用上的和紧接着的onDestroy。但是为什么呢?!?

根据启动新活动时发生的情况来看:
如果第一个活动以某种方式仍然可见(如您所发现的,如果它显示为对话框),它将只接收
onPause()
;如果它不再可见,它也将接收
onStop()

但正如另一位所说,如果您要启动第二个活动以从中获得结果,
startActivityForResults
似乎更符合逻辑


(我也是新手,正在学习格式化,您可能希望通过单击橙色问号阅读帮助-显然,在代码示例之前使用4个空格缩进它们)

您应该能够执行以下操作:

Intent i = new Intent(this, Child.class);
startActivityForResult(i);
(如果从内部类调用Main.this,则只需要Main.this)

要退出子活动时:

setResult(Result.OK);
finish();
这将导致在主类中调用onActivityResult,然后是OnResume


如果这不起作用,您可以尝试在各种onX方法中放置断点或打印语句,以查看调用的是哪种方法。

您是否尝试过
startActivityForResult
?我同意奔腾10。如果您的子(子)活动应始终返回主活动,则startActivityForResult()应该使用。好吧,我尝试了,但没有成功:(是否可能是我对onPause和onResume覆盖做了错误的处理?当我按下back或调用finish()时,屏幕会闪烁一秒钟,主屏幕出现,但我的应用程序仍在后台运行……以下是我的覆盖@Override protected void onPause(){super.onPause();try{preview.onPause();mGameThread.pause();}catch(异常e){onError(print(e));}}@Override protected void onResume(){super.onResume();try{preview.onResume();mGameThread.unpause();}catch(异常e){onError(print(e));}另外,不知道如何设置格式以更好地显示:(预览是我的相机预览,gamethread是在预览上绘制的线程。你应该能够编辑原始问题以更好地设置附加信息的格式。嗯,这很奇怪。当我按finish()时,onResume从不被触发)在我的子类中。每次触发onPause或onResume时,我都使用Toast来显示通知,当我启动Main时它们会被触发,但当子类返回时onResume不会被调用:xSo你看到OnActivityResult被调用了,但不是onResume?我不确定显示Toast是调试这个的好方法。我看到它们有奇怪的sid您最好使用日志语句或使用调试器。
setResult(Result.OK);
finish();