Сделайте приложение-мастер в Android - PullRequest
29 голосов
/ 18 июня 2009

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

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

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

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

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

Ответы [ 5 ]

17 голосов
/ 02 апреля 2013

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

12 голосов
/ 18 июня 2009

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

6 голосов
/ 18 июня 2009

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

1 голос
/ 18 июня 2009

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

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

0 голосов
/ 04 декабря 2018

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

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

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

...