Сделайте приложение-мастер в Android

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

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

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

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

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

5 ответов

Решение

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

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

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

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

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

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

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

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

Другие вопросы по тегам