Android中的儿童活动

Mar*_*nov 7 java android android-manifest android-activity

所以我有两个活动.主要叫做Main,孩子叫做Child.在主活动中单击按钮时,它会触发以下代码:

Intent i = new Intent(Main.this, Child.class);
Main.this.startActivity(i);
Run Code Online (Sandbox Code Playgroud)

这打开了Child活动.

只要我调用finish()或按子活动中的后退按钮而不是返回主要活动,应用程序就会关闭.你能给我一个暗示问题可能是:(

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

android:theme="@android:style/Theme.Dialog"
Run Code Online (Sandbox Code Playgroud)

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

编辑:

所以我尝试使用startActivityForResult并添加

Toast.makeText(this, "onPause", Toast.LENGTH_SHORT).show();
Run Code Online (Sandbox Code Playgroud)

onPauseonResume方法类似的一个.当Child返回onResume时不会被触发.我甚至凌驾于theActivityResult上,甚至没有被触发.:(太奇怪......

我想我发现了问题,但我自己无法解决

儿童活动被激活,的onStop立即那之后的onDestroy是在内部调用的主要活动.但为什么?!?

Che*_*mon 10

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

Intent i = new Intent(this, Child.class);
startActivityForResult(i);
Run Code Online (Sandbox Code Playgroud)

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

如果要退出子活动:

setResult(Result.OK);
finish();
Run Code Online (Sandbox Code Playgroud)

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

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

  • 所以你看到OnActivityResult被调用了,但是没有onResume?我不确定显示toasts是调试它的好方法.我看到他们有奇怪的副作用.使用日志语句或使用调试器可能会更好. (2认同)