1.4. Связь с данными

Реализовано три варианта передачи данных в диаграмму: через интерфейс DataProvider, через механизм источников данных, или с использованием упрощённого API, позволяющего привязывать данные напрямую при помощи метода addData() и удобных конструкторов класса MapDataItem. Последний способ подходит для диаграмм, не привязанных к какому-либо источнику данных.

DataProvider:

Интерфейс DataProvider имеет стандартную реализацию: класс ListDataProvider. Он содержит список экземпляров DataItem из которых будут браться данные для диаграммы. Существует несколько стандартных реализаций интерфейса DataItem:

  • EntityDataItem принимает экземпляр сущности.

  • MapDataItem содержит набор пар ключ-значение.

  • SimpleDataItem принимает экземпляр любого public класса.

Экземпляр DataProvider передается методу setDataProvider() конфигурации диаграммы. Данный способ предоставления данных для диаграммы наиболее универсален, однако требует создания экземпляров DataProvider и DataItem в коде контроллера экрана.

Datasource:

Источник данных типа CollectionDatasource устанавливается для компонента Chart вызовом метода setDatasource(). Данный вариант требует наличия сущности, представляющей данные диаграммы. Он удобен, когда такая сущность уже есть в модели данных приложения, а также когда данные диаграммы нужно отобразить и в виде таблицы.

В главе Пример работы с диаграммами проиллюстрированы все три способа получения данных.

Используемые для отображения свойства сущности или значения, содержащиеся в экземпляре DataProvider, задаются в атрибутах диаграммы, причем атрибуты различаются для разных типов диаграмм. Например для компонента chart:pieChart необходимо задать атрибуты valueField и titleField.В качестве значений могут выступать типы Integer, Long, Double, String, Boolean, Date.

Динамическое добавление данных в существующий график поддерживается для обоих механизмов.

Элемент chart:data:

Этот способ удобен для быстрого прототипирования диаграмм. Элемент chart:data и вложенные в него элементы item позволяют вручную указать фиксированные значения прямо в XML-дескрипторе диаграммы, например:

<chart:pieChart id="pieChart"
                titleField="key"
                valueField="value">
    <chart:data>
        <chart:item>
            <chart:property name="key" value="piece of apple pie"/>
            <chart:property name="value" value="70" type="int"/>
        </chart:item>
        <chart:item>
            <chart:property name="key" value="piece of blueberry pie"/>
            <chart:property name="value" value="20" type="int"/>
        </chart:item>
        <chart:item>
            <chart:property name="key" value="piece of cherry pie"/>
            <chart:property name="value" value="10" type="int"/>
        </chart:item>
    </chart:data>
</chart:pieChart>