Введение
Общее описание
Структура приложения
Уроки
Описание библиотеки
Внутренние данные библиотеки
Связывание данных
Экраны
Компоненты
Общая характеристика
Экраны и компоненты
Модель
Представление
Navigator
componentBarcode
calendar
drawer
enabled
fragmentsContainer
componentDateDiapason
componentIntro
componentMap
menu
menuBottom
componentModel
компонент типа PAGER
компонент типа PANEL
компонент типа PANEL_ENTER
componentPhoto
plusMinus
componentRecognizeVoice
компонент типа RECYCLER
componentSearch
componentSequence
компонент типа SPINNER
componentSubscribe
switchComponent
componentTotal
componentYoutube
Навигация в DePro
Взаимодействие с сервером
Работа с базой данных
Общая информация
Методы
Пуш уведомления
Общая информация
Работа с пушами в DePro
pushNavigator и обработчики
Взаимодействие с сервером
Анимация в DePro
Диалоги
Дополнительные элементы разметки
Общая информация
Calendar
DateDiapason
DrumPicker
ComponEditText
EditTextMask
Gallery
ComponList
PagerIndicator
SheetBottom
ComponSwitch
ComponTextView
Дополнительный материал
Кастомный функционал
Поддержка нескольких языков
Особенности авторизации
Валидация перед отправкой на сервер
Приложения

Экраны

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

Экран можно описать четырьмя методами:

activity(String name, int layoutId)
activity(String name, int layoutId, String title, String formatParams)
activity(String name, int layoutId, Class<T> additionalWork)
activity(String name, Class customActivity)

аналогично задается и фрагмент

fragment(String name, int layoutId)
fragment(String name, int layoutId, String title, String formatParams)
fragment(String name, int layoutId, Class<T> additionalWork)
fragment(String name, Class customFragment)

Здесь name - имя экрана; layoutId - id лайоута с XML разметкой экрана; title - текст который будет выводиться в заголовке (тулбаре) экрана. В этом случае элемент разметки должен иметь id "title".

Если параметр title будет форматом, то названия параметров для него заносятся через запятую в строку formatParams. При выполнении будут использованы значения соответствующих параметров. Если title не форматированная строка, то formatParams не указывается. Например,

activity(PRODUCT_DESCRIPT,R.layout.activity_product_descript,"%1$s", "catalog_name")

В активити с именем “PRODUCT_DESCRIPT” титул будет содержать значение параметра “catalog_name”.

Если необходимо выполнять некоторые нестандартные действия то используется третий метод описания экрана. В нем задается класс additionalWork в котором будут выполняться нестандартные действия. Этот класс должен наследоваться от класса MoreWork

Класс MoreWork содержит много переопределяемых методов, которые вызываются компонентами. Например, такие как: afterBindViewHolder - вызывается после занесения информации в item в компоненте типа list; changeValue - при изменении данных и т.д. В большинство методов передается параметр viewId - id компонента, который вызывает метод. По его значению можно определить какой из компонентов вызвал метод и написать соответствующую обработку. Порядок кастомной обработки в библиотеке декларативного программирования DePro приведен ниже.

Пользовательские экраны

В системе можно использовать и “обычные” (кастомные) фрагменты и активити. В этом случае используется четвертый метод описания экрана. Здесь customActivity (customFragment) обычные активити и фрагменты. Для взаимодействия с системными экранами они должны наследоваться от системных BaseActivity и BaseFragment соответственно. Для таких активити нужно не забыть описать их в манифесте. Если не предполагается использование возможностей системы, то они могут не наследоваться от системных BaseActivity и BaseFragment. Более подробно использование кастомных экранов описано ниже в разделе "Дополнительный материал".

Для фрагментов и активити можно задать дополнительный функционал:

.animate(AS.RL) 

Задает анимацию выхода экрана. Константа RL задает анимацию справа налево. Также существуют другие константы: LR, TB, BT. Их значения контекстно понятные.

.setValue(ItemSetValue ... item) 

Устанавливает значения элементов в разметке для всего экрана. Отдельное значение списка item задается следующим образом:

item(int viewId, ItemSetValue.TYPE_SOURCE source, String name)
item(int viewId, ItemSetValue.TYPE_SOURCE source)
item(int viewId, ItemSetValue.TYPE_SOURCE source, int componId)

Параметр viewId указывает id элемента разметки типа TextView в который будут заноситься данные. Источник данных TYPE_SOURCE может принимать значения enum TYPE_SOURCE {PARAM, SIZE, LOCALE}. Если источник = PARAM, то в viewId заносится значение параметра с именем name. Если источник = LOCALE, то в viewId заносится значение локали. В этом случае параметр name не указывается. Если источник = SIZE, то указывается id компонента типа list который будет заносить в viewId количество элементов списка

Также для экранна можно задать навигатор, в котором описываются действия, выполняемые при клике на элементы представления.

.navigator(ViewHandler ... handlers)

Каждый обработчик списка handlers имеет два обязательных параметра: viewId - id элемента представления который к которому прикреплен обработчик и тип действий. Остальные параметры зависят от типа. В описании обработчик задается следующим образом:

handler(int viewId, ViewHandler.TYPE type[, остальные параметры])

Более подробная информация о навигаторе приведена в разделе "Навигация в DePro".

Передача данных между экранами

Библиотека декларативного программирования DePro имеет несколько способов передачи данных между экранами. Выбор конкретного способа определяется потребностями задач.

Самый простой способ это передача значений для параметров запросов. Он осуществляется автоматически за счет глобального списка параметров и механизма обновления их значений. Поэтому программисту, как правило, не нужно заботиться об обновлении значений параметров.

Второй метод использовать глобальные переменные. Этот метод удобен при необходимости вносить изменения в данные на нескольких экранах.

Третий метод передавать данные непосредственно с вызовом экрана за счет использования флага RECORD или RECORD_COMPONENT. Это обеспечивает передачу параметров в вызываемый экран. Доступ к этим данным осуществляется через модель с методом ARGUMENTS. Для передачи данных в вызывающий экран нужно указать обработчик с типом RESULT_RECORD. В этом случае будет сформирована запись и осуществлен выход с экрана с флагом RESULT_OK. Возвращаемые данные будут доступны для всех обработчиков секции after вызывающего экрана.

Пример передачи данных между экранами с помощью глобальных переменных можно посмотреть в материалах урока 3. Пример передачи данных с помощью записей можно посмотреть в материалах уроков 2 и 7.



Лучше пакета DePro может быть только искусственный интеллект
Задать вопрос
Отправить вопрос