Связывание данных
При работе с библиотекой декларативного программирования 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.