Альтернативы finish () для удаления Activity из вида.

1

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

вспомогательные действия запускаются с помощью StartActivityForResult, а затем, когда пользователь сделал выбор, я вызываю finish(), чтобы вернуться на главный экран.

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

Благодаря,

м

Теги:
android-activity

2 ответа

2
Лучший ответ

Из вашего описания видно, что основная активность получает данные из всех под-действий. Похоже, что этих данных достаточно, чтобы восстановить состояние каждой субактивности.

Вы можете начать суб-действие с уже известными критериями поиска в Intent. Поэтому каждый суб-actvitiy может восстановить свое состояние от намерения onCreate().

Вот последовательность событий:

  1. Запускается приложение, начинается основная работа.
  2. Пользователь нажимает кнопку: Основная активность → Намерение (пусто) → Подпрограмма
  3. Пользовательские критерии поиска:
    Возврат к действию → Цель (критерии поиска) → Основная деятельность
  4. Пользователь нажимает кнопку: Основная активность → Намерение (критерии поиска) → Под-активность

Таким образом, на шаге 4 Основная активность передаст состояние, полученное на шаге 3.

  • 0
    Привет, спасибо за ваш ответ, я, вероятно, пойду с этим подходом, так как StartActivityForResult - единственный способ вернуть данные из моих подзадач.
1

Юо должен использовать флаги намерений андроида. Используйте флаг FLAG_ACTIVITY_REORDER_TO_FRONT

Если он задан в Intent, переданном Context.startActivity(), этот флаг приведет к тому, что запущенная активность будет перенесена в стек стека задач, если она уже запущена.

Например, рассмотрим задачу, состоящую из четырех действий: A, B, C, D. Если D вызывает startActivity() с намерением, который разрешает компонент активности B, тогда B будет перенесен в переднюю часть стека истории, с этим результирующим порядком: A, C, D, B. Этот флаг будет игнорироваться, если также указан FLAG_ACTIVITY_CLEAR_TOP.

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

MyApplication myApp = (MyApplication) getApplicationContext();

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

  • 0
    При таком подходе мне нужно будет вызвать startActivity (mainActivityIntent) из моей подгруппы? Когда я делал это раньше, кнопка «Назад» делала действительно странные вещи
  • 0
    Я изменил некоторый код для использования этого метода, но как мне получить информацию из намерения, которое я формирую в подвиде деятельности?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню