Child Activity in Android

2019-04-07 02:52发布

So I have two Activities. The main is called Main, and the child one is called Child. When a button is clicked in the main activity it triggers the following piece of code:

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

That opens the Child activity.

As soon as I call finish() or press the back button within the child activity instead of going back to the main one, the app just closes. Can you give me a hint where the problem might be :(

P.S. By trial and error I found out that if edit AndroidManifest.xml and add

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

within the declaration of Child the back button and calling finish() behaves as expected: closes the child activity and brings the main into focus. The problem is that when I start typing in an EditText the screen starts flickering (rather bizzare). So I can't use it as a dialog. My main activity uses the camera, so that might be making problems. Although when the child activity is started, the onPause event is fired and it stops the camera until onResume is called.

Edit:

So I tried using startActivityForResult and added

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

to the onPause and a similar one to the onResume methods. When the Child returns onResume doesn't get triggered. I even overrided onActivityResult and even that doesn't get triggered. :( So bizarre...

I think I found the problem but I can't solve it myself

When the Child activity is activated, onStop and immediately after that onDestroy are invoked within the Main activity. But why?!?

2条回答
ら.Afraid
2楼-- · 2019-04-07 03:25

You should be able to do the following:

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

(You only need Main.this if you are invoking this from an inner class).

When you want to exit the child activity:

setResult(Result.OK);
finish();

This should cause onActivityResult to be invoked in your Main class, followed by OnResume.

If that doesn't work, you might try putting break points or print statements in the various onX methods, to see which are being called.

查看更多
成全新的幸福
3楼-- · 2019-04-07 03:29

According to http://developer.android.com/resources/faq/commontasks.html#opennewscreen what happens when you launch the new Activity is indeed different:
If the first Activity is still visible somehow (as you discovered, if it's shown as dialog for example), it will just receive onPause(); if it's not visible at all anymore, it will receive onStop() too.
But as the other said, if you're launching the second activity to get results from it, startActivityForResults seems more logical

(I'm new and learning formatting too, you may want to read the help by clicking on the orange question mark - use 4 spaces before code samples to indent them, apparently)

查看更多
登录 后发表回答