onBackPressed + putExtra

В мобильном приложении активити1 имеет поля для заполнения и кнопку, по клику на которую происходит переход в активити2 для выбора определённых данных. Полученные в активити2 данные необходимо передать в активити1. Делаю это с помощью putExtra, но тогда в активити1 очищаются все другие заполненные ранее поля. Есть мысль сделать так, чтобы кнопка подтверждения выбранных данных в активити2 работала как кнопка "Назад" (onBackPressed();). Собственно вопрос, как сделать так, чтобы в активити2 происходил вызов onBackPressed(); и при этом передача данных с помощью putExtra в активити1? Или же такая задача решается как-то по-другому?


Ответы (2 шт):

Автор решения: Vlad Orlinskas

Ну простой вариант, это передать данные из активити 1 в активити 2 и вернуть их обратно в активити 1. Для этого удобно создать класс контейнер, которой реализует Serializable или Parcelable. putExtra поддерживает их оба. Записывайте в этот контейнер все, что вам нужно и востанавливайте состояние. Не забывайте, что система может потерять intent, когда будет уничтожена. Вам нужно переопределить методы saveInstanceState и onRestoreInstanceState.

P.s. Что бы начать парселизовать объекты, зачастую достаточно класс контейнер пометить аннотацией @Parcelize и реализать интерфейс

@Parcelize
data class Data() : Parcelable

А вообще для сохранения состояния используют viewModel + viewState. Обязательно ознакомтесь или задайте новый вопрос.

→ Ссылка
Автор решения: BORSHEVIK

Как сказали в комментарии:

  1. либо юзайте startActivityForResult
  2. либо https://developer.android.com/training/basics/intents/result

2й вариант проще

А не сохраняются у вас данные, как минимум, вы их не сохраняете в onSaveInstanceState и не восстанавливаете в onCreate или onRestore...

В общем вам нужно разобраться с азами сохранения состояния Почитайте оффициальную доку, там максимально понятно

https://developer.android.com/guide/components/activities/activity-lifecycle#save-simple,-lightweight-ui-state-using-onsaveinstancestate

→ Ссылка