Детская активность в Android - PullRequest
7 голосов
/ 17 июня 2010

Итак, у меня есть два занятия. Основной называется Main , а дочерний называется Child . При нажатии кнопки в основном действии запускается следующий фрагмент кода:

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

Это открывает действие Child .

Как только я вызываю finish () или нажимаю кнопку возврата в дочернем действии вместо возврата к основному, приложение просто закрывается. Можете ли вы дать мне подсказку, где может быть проблема: (

P.S. Методом проб и ошибок я обнаружил, что если отредактировать AndroidManifest.xml и добавить

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

в объявлении Child Кнопка "Назад" и вызов finish () ведут себя как положено: закрывает дочернюю активность и фокусирует основное. Проблема в том, что когда я начинаю набирать EditText , экран начинает мигать (скорее странно). Поэтому я не могу использовать это как диалог. Мое основное занятие - использование камеры, поэтому могут возникнуть проблемы. Хотя при запуске дочернего действия происходит событие onPause , и оно останавливает камеру до тех пор, пока не будет вызван onResume .

Edit:

Поэтому я попытался использовать startActivityForResult и добавил

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

для onPause и аналогично onResume методам. Когда Child возвращает , onResume не запускается. Я даже переопределил onActivityResult , и даже это не срабатывает. :( Так странно ...

Я думаю, что нашел проблему, но сам не могу ее решить

Когда активируется действие Child , onStop и сразу после этого onDestroy вызываются в рамках действия Main . Но почему?!?

Ответы [ 2 ]

10 голосов
/ 18 июня 2010

Вы должны быть в состоянии сделать следующее:

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

(Main.this вам нужно только, если вы вызываете его из внутреннего класса).

Когда вы хотите выйтидочернее действие:

setResult(Result.OK);
finish();

Это должно привести к тому, что onActivityResult будет вызываться в вашем главном классе, а затем OnResume.

Если это не сработает, вы можете попробовать установить точки останова или вывестиоператоры в различных методах onX, чтобы увидеть, какие из них вызываются.

1 голос
/ 18 июня 2010

Согласно http://developer.android.com/resources/faq/commontasks.html#opennewscreen то, что происходит при запуске нового действия, действительно отличается:
Если первое действие все еще каким-то образом видимо (как вы обнаружили, если оно показано, например, в виде диалога), он просто получит onPause();если он вообще больше не виден, он также получит onStop().
Но, как сказал другой, если вы запускаете второе действие, чтобы получить результаты, startActivityForResults кажется более логичным

(Я новичок и тоже изучаю форматирование, вы можете прочитать справку, нажав на оранжевый вопросительный знак - очевидно, используйте 4 пробела перед примерами кода, чтобы сделать отступы)

...