7

所以我有两个活动。main 称为Main, child 称为Child。在主活动中单击按钮时,它会触发以下代码:

Intent i = new Intent(Main.this, Child.class);
Main.this.startActivity(i);

这将打开Child活动。

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

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

android:theme="@android:style/Theme.Dialog"

Child的声明中,后退按钮和调用finish()的行为与预期的一样:关闭子活动并使主要活动成为焦点。问题是当我开始输入EditText时,屏幕开始闪烁(相当奇怪)。所以我不能将它用作对话框。我的主要活动使用相机,因此可能会出现问题。虽然当子活动启动时,会触发onPause事件并停止摄像头,直到调用onResume 。

编辑:

所以我尝试使用startActivityForResult并添加

Toast.makeText(this, "onPause", Toast.LENGTH_SHORT).show();

onPause和类似的onResume方法。当 Child 返回时,不会触发onResume 。我什至覆盖了onActivityResult,甚至没有被触发。:(太奇怪了...

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

Child活动被激活时,在Main活动中调用onStop和之后的onDestroy 。但为什么?!?

4

2 回答 2

10

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

Intent i = new Intent(this, Child.class);
startActivityForResult(i);

(如果您从内部类调用它,则只需要 Main.this)。

当您要退出子活动时:

setResult(Result.OK);
finish();

这应该会导致在 Main 类中调用 onActivityResult,然后调用 OnResume。

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

于 2010-06-17T20:16:56.157 回答
1

根据http://developer.android.com/resources/faq/commontasks.html#opennewscreen启动新 Activity 时会发生什么确实不同:
如果第一个 Activity 仍然以某种方式可见(如您所见,如果它显示为对话框例如),它只会收到onPause();如果它不再可见,它也会收到onStop()
但正如另一个人所说,如果您要启动第二个活动以从中获得结果,startActivityForResults似乎更合乎逻辑

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

于 2010-06-17T20:01:01.703 回答