Android. Сохраняйте ранее добавленные намерения дополнительно при переходе к родительской активности.

В настоящее время я работаю с Android, и у меня все еще есть проблемы с пониманием жизненного цикла Activity.

Позвольте мне показать вам мою проблему с примером:

My App содержит Navigation Drawer, который позволяет использовать для переключения между различными Fragment s. Один фрагмент (фрагмент A) - это список с некоторыми элементами. Нажатие на один элемент открывает активность B, которая может быть описана как подробный вид элемента. B получает всю необходимую информацию по намерению, модель позиции реализует Parcelable и помещается как Extra в Intent. A button Activity B открывает вид карты Activity C.

A - (Item) → B → C

Использование кнопки "Вверх" на панели действий C приводит к сбою приложения, когда метод B Activity onCreate вызывает

Item item = bundle.getParcelable("com.example.myapp.model.Item");

Конечно, поскольку подробный вид B получает всю необходимую информацию, которая должна отображаться с A. Как я могу решить эту проблему? Я хочу, чтобы иметь возможность хранить элемент так или иначе, когда вы вызываете C и снова подходите к B. (Использование кнопки "Назад" на C отлично работает)

Ответы

Ответ 1

Если вы внедрили навигацию, описанную в "Предоставление навигации" на сайте разработчиков Android, вы должны исправить ошибку просто изменение режима запуска для активности B на "singleTop." . Установите это в файле application manifest.xml следующим образом:

<activity ... launchMode="singleTop" ... />

Что происходит сейчас, по-видимому, потому, что режим запуска B является стандартным, заключается в том, что навигация запускает новый экземпляр активности B; он не получает дополнительные функции, которые были первоначально предоставлены A.

Когда режим запуска "singleTop" соответствует связанному документу,

Если родительская активность имеет режим запуска singleTop или намерение вверх содержит FLAG_ACTIVITY_CLEAR_TOP, родительская активность переносится в начало стека и получает намерение посредством метода onNewIntent().

В onNewIntent(), я считаю (пожалуйста, проверьте это), что вы можете просто игнорировать новое намерение, потому что вы хотите продолжать использовать намерение из активности A.