ненормальное поведение родительской активности после завершения дочерней активности

У меня есть Activity A, и я звоню Activity B из Activity A, используя setResultForActivity.

Теперь в Activity B, когда я нажимаю кнопку Done, я запускаю finish(), и он возвращается к Activity A, а затем возвращается к onActivityResult. Теперь проблема в том, что после того, как я выстрелил finish() в Activity B, onCreate Activity A не вызывается, и вот почему

некоторые из пользовательских прослушивателей в моем ListView не работают, похоже, они не привязаны.

так что вся деятельность реагирует довольно странно, может у кого-нибудь есть решение?


person Hunt    schedule 29.03.2013    source источник


Ответы (5)


Почему четвертый ответ? Потому что, на мой взгляд, другие не совсем правильные.

Правда в том, что действие A могло быть уничтожено тем временем или нет. Это зависит от того, нужна ли Android память или нет. Таким образом, возможно, что Activity A вызывается onCreate() (вместе с другими обратными вызовами жизненного цикла) или нет. В последнем случае onActivityResult() вызывается перед onResume().

В то время как для изменений конфигурации наиболее эффективным способом сохранения состояния Activity является nonConfigurationState, если вы хотите подготовиться к перезапуску своей Activity после того, как она была уничтожена, вы можете использовать механизм InstanceState, потому что, пока Android уничтожает вашу Activity A, он сохранит свое намерение и сохраненное состояние экземпляра, чтобы воссоздать его.

Это подчеркивает абсолютную необходимость поместить инициализацию точно в обратный вызов, где она должна быть.

Чтобы проверить, работает ли ваша логика активности независимо от того, уничтожил ее Android или нет, вы можете использовать настройку DevTools «Настройки разработки» -> «Немедленно уничтожить действия». Приложение DevTools доступно на AVD, а также может быть загружено из Google Play.

person class stacker    schedule 06.04.2013

Просто поместите свой материал onCreate() в onResume() Activity A, кроме setContentView().

person Ambar Jain    schedule 29.05.2015
comment
Некоторый пример с объяснением был бы замечательным. - person Nilambar Sharma; 29.05.2015

Просто прочитайте жизненный цикл активности Android: http://developer.android.com/training/basics/activity-lifecycle/stopping.html. onCreate() вызывается только при первом создании активности. Вы можете сделать свой список в методе onResume().

person ruben    schedule 29.03.2013

Активность onCreate не будет вызвана, потому что активность не была уничтожена. Когда действие восстанавливает фокус из другого действия, оно вызывается onStart и onResume, поэтому я бы поместил в них ваших связанных слушателей. Они также будут вызываться, когда обычно вызывается onCreate.

person John Leehey    schedule 29.03.2013
comment
я попытался поместить его в onResume, и я попытался установить там прослушиватель, но они не сработали, когда дочерняя активность завершится - person Hunt; 30.03.2013

После того, как ваша дочерняя активность завершена (), она возвращается к выполнению onActivityResult, который в вашем случае находится в действии A. Метод onCreate не предполагается и не вызывается при уничтожении вашего поддействия, также известного как действие B.

Пожалуйста, опубликуйте исходный код, чтобы мы могли поработать, и я улучшу свой ответ! :)

person Entalpi    schedule 06.04.2013