Измените данные набора намерений до того, как действие будет заново создано после изменения ориентации - PullRequest
7 голосов
/ 30 июля 2009

У меня есть уведомление, которое запускает мою деятельность и передает сообщения, используя функцию putExtra () намерения. Затем сообщение отображается пользователю в функции onCreate действия. Когда приложение перезапускается из-за изменения ориентации, сообщение отображается снова, поскольку оно все еще находится в связанных данных намерения.

Как я могу удалить лишние данные?

Я попробовал следующее:

Bundle bundle = getIntent().getExtras();
if (bundle.getBoolean("showMessage")) {
    // ... show message that is in bundle.getString("message")
    // remove message
    bundle.remove("showMessage");
}

Но сообщение все равно будет отображаться после изменения ориентации, похоже, что использованное намерение - не то, которое я изменил, а оригинальное. Единственный обходной путь, который я нашел, - это дополнительно сохранить showMessage в o nSaveInstanceState(). Есть ли другой способ? Или это путь?

Ответы [ 2 ]

21 голосов
/ 04 августа 2009

(простое) решение:

Вместо звонка

bundle.remove("showMessage");

Я сейчас использую

getIntent().removeExtra("showMessage");

, который работает как ожидалось. Похоже, getIntent (). GetExtras () возвращает копию, а не ссылку.

9 голосов
/ 31 июля 2009

Ваш onSaveInstanceState() подход - правильный ответ, AFAIK.

...