Android возобновляет мою активность, даже если я вызываю FINISH на BackButton - PullRequest
0 голосов
/ 15 декабря 2011

У меня есть действие A, которое запускает B с намерением. (B MapActivity и имеет некоторый асинхронный код)

в B у меня есть следующий код

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    // TODO Auto-generated method stub
 if ((keyCode == KeyEvent.KEYCODE_BACK)) {
//          Log.d(this.getClass().getName(), "back button pressed");

     finish();
     return true;
    }

    return super.onKeyDown(keyCode, event);
}

Это просто не работа. Я имею в виду, что когда я нажимаю кнопку «Назад» на телефоне, текущее действие B исчезает, и отображается действие A, которое запустило B.

Если я снова нажму на кнопку A, которая запускает B, я вижу, что B - именно то, что было, когда я закрывала ее. ЖЕ текст в текстовых полях, та же позиция на карте ... Так что я думаю, что действие B на самом деле не закрыто.

Как я могу закрыть его по-настоящему, чтобы при повторном его запуске действие B считалось новорожденным?

РЕДАКТИРОВАТЬ: просто чтобы прояснить вопрос: Я хочу, чтобы это работало так: когда пользователь находится в режиме активности B и нажата кнопка BACK, B должен быть закрыт и уничтожен. Когда пользователь снова запускает B из A, B должен запускаться как НОВОЕ действие с пустым полем, картой сброса и т. Д. И т. Д., Так же, как в первый раз, когда пользователь запускает B из A.

Ответы [ 4 ]

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

Как я уже говорил в своем последнем комментарии к посту, @Jianhong дал мне правильный ответ (также если и в качестве комментария).Поскольку он не скопировал комментарий как ответ вовремя, я добавляю этот ответ и отмечаю его как ПРИНЯТЫЙ.Спасибо @Jianhong!

Ответ: @Jianhong OMG!ты совершенно прав!Я проверял на эту проблему в прошлые дни, но я не мог найти это как ... я не ОБНОВЛЕНО из SVN.мой коллега вставил строки кода, которые предварительно заполняют поля некоторым статическим var!

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

Вы пытались запустить B, вызывая startActivityForResult () в A?

Выполните всю вашу обработку в B, а затем убедитесь, что вы вызвали на нем финиш, и это должно очистить все данные в нем.

Пожалуйста, дайте мне знать, если это работает.

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

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

Да, и еще одна вещь, попробуйте исследовать метод NewIntent в упражнении B, я полагаю, это будет действительно полезно

0 голосов
/ 16 декабря 2011

Вместо того чтобы возвращать true, попробуйте вернуть super.onKeyDown (keyCode, event) после finish ().Вы можете попробовать еще одну вещь: указать android: noHistory = "true" в манифесте для этого действия.Указание этого атрибута не сохраняет активность в стеке действий.http://developer.android.com/guide/topics/manifest/activity-element.html#nohist

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...