Сделайте приложение, похожее на волшебника, в Android
-
06-07-2019 - |
Вопрос
Как вы думаете, это лучший способ создания приложения, подобного мастеру (пользователь может перемещаться между экранами с помощью кнопки «Далее» и «Назад», и на каждом экране необходимо сохранять данные о состоянии) на платформе Android.
Я в основном могу думать двумя способами:
<Ол>Наличие одного вида активности + вида для каждого экрана, а затем я переключаю экран, вызывая каждое действие. Что приятно, так это то, что я могу использовать системную кнопку «назад» в качестве обработчика спины, и мне не нужно заботиться об этом самостоятельно, так как каждое действие будет сохранять свое собственное состояние.
Имея одно действие и несколько представлений, и то, что я переключаю представления при каждом изменении экрана, это помогает мне повторно использовать больше кода, но делает сохранение состояний беспорядочным.
Что ты думаешь? Какой лучший способ сделать это на Android?
Решение
Я предлагаю перейти с 2, поскольку это соответствует цели действий и взглядов. Сохранение состояния в этом случае легко - если вы используете шаблон MVC, вы можете просто иметь объект модели, который передается в представления. Каждое представление будет иметь части модели, которые он может читать / записывать. Независимо от того, где вы находитесь, модель всегда должна иметь текущее состояние. Если вы избавитесь, просто сохраните модель. Восстановление работает автоматически, так как вы уже читали с модели при показе каждой страницы.
Другие советы
Я разработал облегченную библиотеку Android, которая построена на основе Android ViewPager и может использоваться для создания действий, подобных мастеру. Проверьте это: WizarDroid .
Я выбрал первый подход, поскольку он кажется более естественным. Другое приложение использует ViewFlipper
для переключения видов, но это далеко не так, как в мастере.
Я думаю, что 2 лучше. Разместите каждую "страницу" в представлении, а затем просто чередовать их показ и скрытие. Делает это тривиально, чтобы сделать хорошие переходы. Какое состояние вы думаете о поддержании? Единственное, что не работает автоматически, это фокус, и я думаю, что вы, вероятно, захотите сбросить его каждый раз, когда вы переключаете страницы. Также легко вернуться к исходному состоянию, если вы считаете, что это правильное поведение для вашего приложения.
С помощью 1 вы можете повторно использовать почти весь ваш код (просто определите свой собственный класс WizardBase), но я думаю, что действия намного медленнее запускаются (и требуют больше памяти), чем переключение между представлениями.
9 лет назад это был, очевидно, совсем другой котелок с рыбой - но я думаю, что лучший способ сделать это сейчас - это использовать фрагменты. Р>
Иметь фрагмент для каждой «страницы» в мастере, позволяя ему обрабатывать свой собственный жизненный цикл и состояние.
Измените страницу внутри каждого фрагмента с помощью Fragment.getFragmentManager ( ) - это возвращает FragmentManager из родительского Activity, позволяя Fragment заменять себя.