Кнопка возврата занимает 3 попытки - PullRequest
0 голосов
/ 15 февраля 2012

Я занимаюсь разработкой приложения для Android и не понимаю кнопку "Назад".

Существует действие (скажем, A1), из которого, нажав кнопку, пользователь переходит к другому действию (например, A2).Как только пользователь завершил действие A2, он нажимает кнопку «Назад», чтобы вернуться к предыдущему действию A1.Все документы говорят, что A1 будет onResume () на этом этапе.

И это так.Однако если я нахожусь в A2 и меняю ориентацию экрана (с альбомной на портретную или наоборот), то происходит что-то совсем другое.Активность A2 снова вырисовывается, как и ожидалось, с другой ориентацией экрана.Когда я сейчас нажимаю BACK, Activity A2 снова появляется (без изменения ориентации экрана).Повторное нажатие кнопки НАЗАД снова вызывает действие А2.Третье нажатие на спину возвращает вас к занятию А1.

Что я здесь не так делаю, что мне не хватает?Спасибо

Питер

Ответы [ 2 ]

0 голосов
/ 21 февраля 2012

Мой вопрос был сформулирован не совсем правильно.Я немного упростил дело.Я использую Spinner, а не Button, чтобы перейти к следующему действию.

У Spinner (и Gallery) есть грубая ошибка, не упомянутая в документации - обработчик события OnItemSelectedListener вызывается, когда пользователь физически щелкаетуправление счетчиком, а также, когда счетчик впервые выложен с помощью кода платформы.Поэтому ваш код обработки счетчика должен определять, было ли событие вызвано выбором пользователя или размещением счетчика.Самый простой способ сделать это - сделать так, чтобы первый элемент в Spinner всегда был «еще не сделан выбор», и игнорировать все события в этом выборе.См. Выбор Android Spinner и аналогичные сообщения.

В моем случае изменение ориентации привело к тому, что спиннер снова выложился, и поэтому я получил от него два события, первое событие макета, вторая из ранее выбранной записи.И , что вызвало фальшивую вторую активность, и , что означало, что для «возврата» к первой операции потребовалось 3 нажатия кнопки «назад».На самом деле он возвращался к первому нажатию, затем спиннер запустил событие макета и обычное событие, дважды поместив меня во второе действие.Этого не было видно на экране, но было видно с помощью сообщений журнала.

При изменении ориентации текущее действие уничтожается, а новое действие создается / запускается.Когда вы изменяете ориентацию и нажимаете клавишу «Назад», предыдущее действие извлекается из верхней части приостановленного стека, уничтожается, и создается / запускается новая версия этого действия.

При изменении ориентации экрана действиев старой ориентации никогда не сохраняется.Он будет немедленно уничтожен или, если он окажется ниже паузы, он будет уничтожен, когда достигнет вершины.

0 голосов
/ 15 февраля 2012

вы не обрабатываете изменения конфигурации.Проверьте эту ссылку, она может вам помочь.

Когда вы меняете ориентацию с портретной на альбомную или альбомную на портретную, и если вы не обрабатываете изменения конфигурации, то действие воссоздается.

...