Как создать цепочку макетов / активити, чтобы данные предыдущей активити сохранялись в следующей?

Смысл в чем: Есть 3 макета: основной и 2 второстепенных. Как только пользователь жмет на TextView на основном макете/активности - его перебрасывает на определенную активность/макет, чтобы он заполнил текстовое поле.
После чего, он жмет кнопка "Далее", запускается следующий макет с текстовым полем, где пользователь вводит данные, и после следующего нажатия, все это сохраняется на одном макете (основном) Т.е. в следующем макете/активности сохраняются данные предыдущего. Как это можно реализовать?


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

Автор решения: Sergei Buvaka

Ну тут вариантов масса.

  • Вы можете к примеру иметь на все ваши три активити (т.к. они являются частью одного флоу) иметь одну сущность которая переживает все 3 активити (например Presenter или ViewModel). Собственно на каждом шаге сохранять туда промежуточные результаты и все.

  • Можно как подсказали вам в комментах использовать фрагменты (хотя концептуально разницы нет), из фрагментов можно через некий (реализованный вами) интерфейс пробрасывать в основную активити данные из фрагментов. Типа заполнил поле - сразу же задал это значение в активити. И в момент закрытия фрагментов данные уже будут в активити.

  • Можно открывать активити и использоваться startActivityForResult(). Этот метод позволяет возвращать какие-то данные в вызывающую активити. Т.е. вы вызвали вашу вторую активити вывели там какое-то поле, пробросили его во вторую активити, там еще что-то ввели и потом методом setResult() вернуть результат.

  • Можно вообще в каком-то временном кэше (синглтон или даже SharedPreference) хранить данные и по возврату их подтягивать в основную активити.

Лично я бы использовал 1ый вариант, или инкапсулировал логику (подобные вещи как по мне могут переиспользоваться) второй активити в отдельный флоу (тут можно как раз и сделать 2 фрагмента внутри) и возвращал бы через onActivityResult().

→ Ссылка