2012-01-26 5 views
0

У меня есть приложение, которое имеет три действия, позволяет называть их A, B и C для соглашения.Деятельность жизненного цикла в Android

A называет B с помощью StartActivity.

Когда пользователь нажимает кнопку «Назад/Отмена», мне нужно вызвать Activity C, поэтому я включил OnPause Activity B, чтобы вызвать Activity C, и мне нужно вернуться из действия C, поэтому я вызвал Activity C с startActivityForResult и реализовал метод onActivityResult в действии B для получения возврата.

Все работает отлично, но когда активность C заканчивается, приложение получает обратно активность А, и мне нужна активность пользователя B.

я должен назвать активность B явно еще раз или я сделал что-то не так?

ответ

2

Я действительно не уверен, чего вы хотите достичь с таким поведением. В любом случае, вы возвращаетесь с C на A, потому что вы нажали клавишу «Назад» и не переопределили ее поведение в onBackPressed(). Итак, текущая активность (B) только что закончилась, поэтому вызывается onPause(), поэтому C начал. Но к тому времени, когда C станет активным, вы будете иметь только A и C в стек Activity.

Вам необходимо переопределить onBackPressed() в действии B и вызвать C оттуда, забудьте onPause().

1

Вы не должны называть другую операцию нажатием кнопки возврата. Кнопка «Назад» выведет активность (B) из стека. Когда вы перейдете из Activity B, Android завершит эту операцию и убьет ее. Это стандартный рабочий процесс, который лучше не испортит. Поместите некоторую кнопку в действие B и вызовите C для получения результата, тогда вы сможете получить результат в операции B.

0

Когда вы доберетесь до onPause() в действии B, он уже отключается, поэтому, когда вы вернетесь к нему, он исчезнет.
Вы можете, как вы говорите, запустить B из C, когда закончите, или запустить C в B onBackPressed() (а затем вернуться из этого метода, не вызывая метод super). Это отменяет действие по умолчанию для закрытия Activity.

Смежные вопросы