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

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

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

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

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

Что вы думаете? Как лучше всего это сделать на Android?


person Lucas S.    schedule 18.06.2009    source источник


Ответы (5)


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

person AdamC    schedule 18.06.2009
comment
Существует библиотека, которая позволяет очень легко создавать функции мастера, ознакомьтесь с WizarDroid. Это хорошо задокументировано и постоянно развивается. - person Nimrod Dayan; 15.09.2013
comment
@ CodePond.org Это именно то, что мне нужно. Он отлично работает, и мне не потребовалось время, чтобы подражать этому примеру. - person theblang; 29.07.2014

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

Используйте компонент навигации Android с комбинацией ViewModels, чтобы создать последовательность действий мастера.


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

person Nimrod Dayan    schedule 01.04.2013
comment
Это хорошее решение, но не совсем общее. Использование окна просмотра требует создания по крайней мере одного фрагмента с каждой стороны, что может быть неудобно, если содержимое следующего шага еще не определено. - person Sergo Pasoevi; 11.04.2014
comment
не могу понять, как использовать Wizardroid, который зависит от поддержки lib 19.x с более новыми версиями поддержки lib - person m02ph3u5; 07.11.2014
comment
Библиотека WizarDroid больше не разрабатывается. См. github.com/nimrodda/wizardroid#deprecated. - person Nimrod Dayan; 13.07.2019
comment
@DarkCygnus, пост был отредактирован, чтобы сказать это, после того, как я оставил этот комментарий. Ответы можно редактировать, так что имейте это в виду. Я удалю исходный комментарий, и этот, вы можете сделать то же самое, потому что все они теперь неактуальны. - person David d C e Freitas; 15.07.2019

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

person yanchenko    schedule 18.06.2009
comment
@ Исаак Уоллер Что такое? не используете ViewFlipper? - person Orr Matarasso; 31.08.2009

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

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

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

person Luke    schedule 04.12.2018

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

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

person hacken    schedule 18.06.2009