Главная » Разработка для Android » Знакомство с RemoteViews и AppWidgetManager

0

Класс RemoteViews предназначен для описания и управления иерархи- ями Представлений, которые принадлежат к процессу другого приложения. Это позволяет изменять свойства или вызывать методы, принадлежащие Представлению, которое выступает частью другого приложения.

Например, Представления внутри виджетов  работают в отдельном про- цессе (как правило, это домашний экран), поэтому RemoteViews может использоваться для изменения пользовательского интерфейса виджета из Приемника намерений, работающего внутри вашего приложения.

Класс  AppWidgetManager задействуется для обновления виджетов и предоставляет информацию о них.

Используя RemoteViews в сочетании с AppWidgetManager, вы получите возможность изменять внешний вид Представлений, которые поддерживают- ся фреймворком для создания виджетов. Среди прочего можно показывать и скрывать элементы, менять текст и изображения, добавлять  реакцию на события нажатия.

В этом разделе  рассказывается о том, как создавать  новые объекты RemoteViews внутри  и за пределами  метода onUpdate, принадлежащего классу AppWidgetProvider. Вы также узнаете, как использовать RemoteViews для обновления пользовательского интерфейса виджетов  и добавления к ним интерактивности.

Создание объектов RemoteViews и использование

AppWidgetManager для их применения

Чтобы создать новый объект класса RemoteViews, необходимо передать в его конструктор имя пакета приложения, откуда он вызывается, и ресурс разметки, с которой вы хотите работать, как показано в листинге 10.5. Позже в этом разделе вы научитесь использовать объект RemoteViews  для обнов- ления Представлений и разметки  вашего виджета.

Листинг 10.5. Использование RemoteViews

RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.my_remote_layout);

Чтобы манипулировать виджетами  с помощью RemoteViews,  вы- зовите  статический метод getInstance. В итоге вы получите  экземпляр AppWidgetManager, который  можно использовать для поиска  каждого экземпляра конкретного виджета. В продолжении листинга 10.5 показано, как это делать:

// Получите экземпляр AppWidgetManager. AppWidgetManager appWidgetManager = AppWidgetManager. getInstance(context);

// Получите идентификаторы каждого экземпляра выбранного виджета. ComponentName thisWidget = new ComponentName(context, MyAppWidget.class); int[] appWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);

После того как вы закончите вносить изменения в объект RemoteViews, подтвердите  их для одного или нескольких  виджетов  с помощью вызова метода updateAppWidget из AppWidgetManager, передав ему одиночный идентификатор виджета или их массив:

appWidgetManager.updateAppWidget(appWidgetIds, views);

Стандартный подход к обновлению  пользовательского интерфейса виджета  заключается в последовательном переборе значений  из массива идентификаторов, как показано  в листинге  10.6. Это позволяет  присваи- вать разные значения  для каждого конкретного виджета, основываясь на настройках  или требованиях UI.

Листинг 10.6. Стандартный подход к обновлению виджета

final int N = appWidgetIds.length;

// Пройдитесь по виджетам, создавая и применяя

// объект RemoteViews для каждого из них for (int i = 0; i < N; i++) {

int appWidgetId = appWidgetIds[i];

// Создайте новый объект RemoveViews

RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.my_widget_layout);

// TODO Обновлять пользовательский интерфейс виджета с помощью

// объекта views.

// Обновите виджет с помощью AppWidgetManager, используя

// измененный объект RemoveViews. appWidgetManager.updateAppWidget(appWidgetId, views);

}

Источник: Майер P. Android 2 : программирование приложений для планшетных компьютеров и смартфонов : [пер. с англ. ] / Рето Майер. — М. : Эксмо, 2011. — 672 с. — (Мировой компьютерный бестселлер).

По теме:

  • Комментарии