В был описан существующий набор классов в SDK, который поддерживает виджеты домашнего экрана. Основными такими классами являются AppWidgetProvider, AppWidgetManager, RemoteViews и активность, которая может использоваться для конфигурирования AppWidgetProvider с помощью параметров инициализации.
Давайте кратко рассмотрим ключевую идею функционирования виджетов домашнего экрана (ее знание должно несколько упростить освоение дальнейших материалов). Класс AppWidgetProvider — это широковещательный приемник, который вызывается однократно на основе интервала, заданного в конфигурационном файле. Затем AppWidgetProvider загружает экземпляр RemoteViews, основанный на файле компоновки. После этого объект RemoteViews передается AppWidgetManager для отображения на домашнем экране.
Дополнительно можно сообщить Android, что имеется активность, которая должна вызываться перед первым помещением виджета на домашний экран. Это позволит конфигурационной активности устанавливать параметры инициализации для виджета.
Для удаленных представлений виджета можно также настроить события onClick, чтобы на их основе запускать намерения. Эти намерения затем могут обращаться к любым необходимым компонентам и отправлять сообщения широковещательному приемнику AppWidgetProvider.
С высокоуровневой точки зрения все основные сведения о виджетах домашнего экрана перечислены. Остальное — это механизмы и вариации каждой из описанных базовых идей.
Для поддержки удаленных списковых представлений в Android./. появились следующие новые классы.
RemoteViewsFactory. Этот класс позволяет наполнить удаленное списковое представление в основном подобно тому, как адаптеры списков наполняют обычные списковые представления (см. главу ). Класс является тонкой оболочкой вокруг адаптера спискового представления и предназначен для асинхронной доставки отдельных удаленных представлений удаленному списковому представлению. Таким образом, основная работа этого класса заключается в предоставлении удаленного представления для каждого элемента в списке. Эта фабрика загружает компоновку для каждого элемента и возвращает ее, заполненную данными. Очевидно, что эта компоновка может содержать в качестве дочерних элементов только удаленные представления.
RemoteViewsService. Этот класс является службой, которая отвечает за возврат экземпляра RemoteViewsFactory, указанного идентификатором спискового представления в файле компоновки. За привязку службы удаленных представлений к удаленному списковому представлению отвечает AppWidgetProvider. Это делается за счет присоединения намерения, которому известно, как обращаться к данной службе, к идентификатору удаленного спискового представления. Служба позволяет расширить время жизни процесса, содержащего AppWidgetProvider. В противном случае, когда широковещательный приемник возвращает управление, процесс может быть отозван. Взаимосвязь между широковещательными приемниками и службами, которые должны выполняться за пределами времени жизни широковещательного приемника, объяснялась в
Для поддержки удаленных списковых представлений были добавлены следующие новые методы.
RemoteViews.setPendingIntentTemplate. Этот метод позволяет установить шаблон ожидающих намерений для удаленного спискового представления, чтобы реагировать на события щелчков на элементах списка. Шаблоны будут более подробно рассматриваться позже.
RemoteViews.setOnClickFillIntent. Этот метод устанавливает отдельные элементы удаленного спискового представления и работает очень похоже на предыдущий метод.
Указанные два дополнительных метода вместе позволят реагировать на щелчки, выполняемые на удаленных списковых представлениях. Эти два метода спроектированы так, чтобы создавать как можно меньше ожидающих намерений.
Далее в упомянутые выше классы и методы будут описаны более детально. С учетом этих новых средств ниже перечень основных шагов для работы со списковым представлением в виджете домашнего экрана.
Подготовьте удаленную компоновку для виджета. Создайте подходящую удаленную компоновку со списковым представлением внутри. Удаленная компоновка — это обычная компоновка, содержащая только разрешенные удаленные представления. Это ничем не отличается от того, что можно делать с любым виджетом домашнего экрана.
Загрузите удаленную компоновку. В методе onUpdate поставщика виджета загрузите составное представление удаленной компоновки, построенной на предыдущем шаге, http://www.radianse.ru/catalog/gold/perstni/ как удаленное представление. Здесь также нет никаких отличий.
Настройте RemoteViewsService. Найдите в компоновке списковое представление по его идентификатору и установите для этого идентификатора удаленного спискового представления намерение, которое будет обращаться к службе удаленного спискового представления. Настройте RemoteViewsFactory. Служба удаленного спискового представления из шага должна возвращать экземпляр RemoteViewsFactory списка, который знает, как наполнять удаленное списковое представление.
Настройте события щелчко. В качестве части настройки представления в AppWidgetProvider установите также шаблон ожидающего намерения onClick, чтобы можно было реагировать на это намерение. Однако также понадобится соответствующим образом настроить отдельные щелчки, используя RemoteViewsFactory для каждого представления в списке. Причина в том, что элементы в удаленном списковом представлении наполняются из фабрики списковых представлений.
Обеспечьте реакцию на события щелчко. Что-то должно реагировать на события onClick, установленные для удаленных списковых представлений. Приемником этих событий можно сделать AppWidgetProvider. Вам потребуется подготовить широковещательный приемник для получения и реагирования на события onClick, которые поступают от удаленных представлений.
Давайте рассмотрим все эти шаги на примерах кода.
Опубликовал Kest
February 14 2015 14:04:43 ·
0 Комментариев ·
3947 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.