Навигация в DePro
В навигаторе описываются действия на различные события. Библиотека декларативного программирования DePro обеспечивает возможность реакции на следующие события:
- Действия пользователя (клики на кнопках, выбор пунктов меню и пр.). - События от сервера (пуши). - Ответ сервера на запросы приложения (данные или ошибки). - Ответ вызывающему экрану от вызываемого экрана о завершении своей работы. - Системные события, в частности событие старта приложения.
Каждое действие описывается обработчиком (handler) - объектом класса ViewHandler. В общем случае любой навигатор представляет собой совокупность обработчиков:
navigator(handler(...), handler(...), handler(...) ...)
В общем случае обработчик имеет вид:
handler(viewId, тип обработки, дополнительные параметры)
Здесь: viewId - id элемента разметки при тапе (клике) на который нужно выполнить действия; тип обработки - тип действия, которое необходимо выполнить.
Для некоторых типов действий имеются “персональные” названия обработчика. Например: back(int viewId), start(int viewId, String screen) - при клике на viewId вызывается экран screen. В некоторых случаях событие не может быть првязано к конкретному элементу разметки, например при клике на весь item для RecyclerView, в этом случае viewId нужно задать равным 0 либо вообще пропустить.
Обработчики выполняются в порядке их описания в navigator Поэтому если действия зависят между собой, то их нужно описывать в правильном порядке.
Полный список обработчиков с кратким их описанием приведен в приложении.
Навигатор может относиться к отдельному компоненту, отдельному экрану или к приложению в целом. Кроме того навигатор может относиться к некоторым типам обработчиков. Соответственно и область действия навигаторов будет являться компонент, экран, приложение, или обработчик. Область действия определяется тем к какому компоненту относится элемент разметки на который ссылается обработчик в viewId. Кроме того набор действий для навигаторов различных компонентов и экрана отличаются.
Навигаторы для компонентов указываются четвертым параметром в описании компонента. Навигаторы экранов подключается к экрану как компоненты или дополнительный функционал. Они описываются стандартным образом:
navigator(handler(...), handler(...), handler(...) ...)
Для экранов предусмотрен навигатор действий при получении пушей. Он описывается следующим образом:
.pushNavigator(handler(...), handler(...), handler(...) ...)
В нем используются специфические обработчики. Они описаны в разделе "Работа с пушами в DePro". Пример показан в уроке 9.
Навигатор, который относится ко всему приложению, предназначен для установки начальных настроек. Он вызывается при старте приложения и описывается в методе declare класса MyDeclareScreens следующим образом:
initialSettings(handler(...), handler(...), handler(...) ...);
В настоящее время для навигатора этого типа реализован лишь один тип обработчика: subscribePush(URL_SUBSCRIBE). Здесь URL_SUBSCRIBE адрес для подписки.
Некоторые обработчики могут в качестве параметров содержать навигаторы. Например, обработчик типа CLICK_SEND передает данные на сервер и имеет навигаторы (при необходимости) для описания действий для успешного и не успешного выполнения операции отправки данных. Навигаторы здесь задаются следующим образом:
after(handler(...), handler(...), handler(...) ...) и afterError(showDialog, handler(...), handler(...), handler(...) ...)
Здесь showDialog имеет значение true если перед выполнением действий нужно показать диалог об ошибке и равно false в противном случае.