Введение
Общее описание
Структура приложения
Уроки
Описание библиотеки
Внутренние данные библиотеки
Связывание данных
Экраны
Компоненты
Общая характеристика
Экраны и компоненты
Модель
Представление
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
Дополнительный материал
Кастомный функционал
Поддержка нескольких языков
Особенности авторизации
Валидация перед отправкой на сервер
Приложения

Связывание данных

При работе с библиотекой декларативного программирования DePro программист не заботится о присвоении данных элементам разметки. Он лишь в компоненте указывает источник данных (model) и view. Библиотека сама заносит информацию в элементы разметки. Связывание данных осуществляется по имени поля в данных и имени id элемента разметки. При этом библиотека не накладывает никаких требований к оформлению view, например, таких как в DataBinding.

В ряде случаев бывает необходимость занести одно и тоже значение в два разных элемента разметки. В XML нельзя присвоить одно и тоже имя id двум элементам одного лайаута. В этом случае нужно использовать библиотечный элемент, например, ComponTextView. Все библитечные элементы имеют атрибут alias. Если он задан то связывание данных будет происходить не по имени id, а по значению атрибута alias.

Данные, например, поступающие с сервера могут содержать поля, которые являются записью (классом). Например:

    {
        "categoryId":39,
        "productId":1107,
        "title":"Умный мусорный бак (что говорит)",
        "description":
            {
                "text1":"Наша компания ООО Системы модернизации складов - предлагает для ...",
                "text2":"”,
                "characteristics":[{"title":"Объем","value":"1,5 куб"},{"title":"Подключение","value":"380 В"}]
            }
    }

Здесь поле description содержит поля text1, text2, characteristics. В этом случае для присвоения элементу разметки значения, например, поля text1 нужно задать ему id (или alias) "description.text1". Вложенность классов ничем не ограничена разве, что здравым смыслом.

Аналогичным образом вложенные поля указывают и в конструкциях языка. Например, управление видимостью элемента разметки R.id.full_desc описывается следующим образом: visibility(R.id.full_desc, "description.text2")

При связывании данных будут выполнены необходимые преобразования типов. Например, числовые поля будут преобразованы в строку. Если необходимо форматировать данные, то нужно использовать библиотечные элементы (их описание приведено в разделе "Дополнительные элементы разметки"). В частности ComponTextView имеет атрибуты которые задают форматирование дат (времени), чисел.

Для элементов разметки типа ImageView действия зависят от содержимого соответствующего поля. Если оно начинается на "http://" или "https://", то с сервера загружается изображение по адресу указанному в данных. Если поле содержит символы "/" или ".", то спереди добавляется базовый URL, указанный в классе AppParams? и загрузится соответствующее изображение. В противном случае подключается локальный файл с именем, которое содержится в поле.

Для загрузки изображений используется библиотека Glide. Поэтому для задания эффектов преобразования изображения можно использовать библиотечный элемент разметки ComponImageView, которому можно задать атрибуты: placeholder, blur, oval.

Некоторым библиотечным элементам могут связываться не только с простыми типами данных. Например, элемент Gallery принимает данные TYPE_LIST_FIELD и отображает их в виде галереи весь список изображений. Пример использования Gallery можно посмотреть в уроках 2 и 4.

Так как полям представления присваиваются значения по совпадению названия поля в записи с названием id элемента разметки, то при отсутствии поля в записи в представлении значение элемента разметки не будет изменено. Поэтому в записи должны быть поля для всех элементов разметки, которые нужно отображать. Если значение отсутствует, то нужно передавать пустое значение (“”, null, 0 и т.д.). Это важно для таких виджетов у которых представления используются для разных наборов данных. Например, RecyclerView.



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