Сделать приложение-волшебник на Android-устройстве

Что вы считаете лучшим способом сделать приложение, подобное волшебнику (пользователь может перемещаться между экранами с помощью кнопки "Следующий и задний", и каждый экран должен сохранять некоторые данные состояния) на платформе Android.

В основном я могу думать в двух подходах:

  • Имея одно действие + просмотр для каждого экрана, а затем я делаю экранный переключатель, вызывая каждое действие. Что делает это приятным, так это то, что я могу использовать кнопку возврата системы в качестве моего back-обработчика, и мне не нужно об этом заботиться, так как каждое действие будет сохранять его собственное состояние.

  • Имея одно действие и многие представления, а также то, что я переключаю виды в каждом изменении экрана, это помогает мне повторно использовать больше кода, но делает состояния сохранения беспорядочными.

Как вы думаете? Каков наилучший способ сделать это на Android?

Ответ 1

Я предлагаю идти с 2, поскольку он соответствует цели деятельности и взглядам. Сохранение состояния в этом случае легко - если вы используете шаблон MVC, вы можете просто иметь объект модели, который передается вместе с представлениями. В каждом представлении будут части модели, которые он может читать/писать. Независимо от того, где вы находитесь, модель всегда должна иметь текущее состояние. Если вы настроены, просто сохраните модель. Восстановление выполняется автоматически, так как вы уже читали из модели, когда показываете каждую страницу.

Ответ 2

Эта библиотека больше не разрабатывается.

Используйте Android Navigation Component с комбинацией ViewModels для создания потока мастера.


Я разработал облегченную библиотеку Android, которая построена поверх Android ViewPager и может использоваться для создания действий, подобных мастеру. Проверьте это: WizarDroid.

Ответ 3

Я пошел с первым подходом, поскольку это кажется более естественным. Другое приложение использует ViewFlipper для переключения представлений, но это далеко не что-то вроде мастера.

Ответ 4

Думаю, 2 лучше. Поместите каждую "страницу" в вид, а затем просто чередуйте показ и скрытие. Делает тривиальным выполнение приятных переходов. Какое состояние вы думаете о поддержании? Единственный, который не работает автоматически, будет сосредоточен, и я думаю, вы, вероятно, захотите reset, чтобы каждый раз, когда вы переключаете страницы. Это также тривиально, чтобы ловить назад, если вы считаете, что это правильное поведение для вашего приложения.

С помощью 1 вы можете повторно использовать почти весь свой код (просто определите свой собственный класс WizardBase), но я думаю, что действия намного медленнее запускать (и требуют больше памяти), чем переключение между представлениями.

Ответ 5

9 лет назад это был, очевидно, совсем другой чайник из рыбы, но я думаю, что лучший способ сделать это сейчас - с Фрагментами.

У вас есть фрагмент для каждой "страницы" в мастере, позволяя ему обрабатывать свой собственный жизненный цикл и состояние.

Измените страницу изнутри каждого фрагмента с помощью Fragment.getFragmentManager() - это возвращает FragmentManager из родительской активности, позволяя фрагменту заменить себя.