Как реализовать кнопку на виджете Android
Я только начинаю разработку под Android, и я создал симпатичный маленький виджет, который отображает некоторую информацию на моем домашнем экране. Однако теперь я хочу реализовать кнопку на моем виджете, которая обновляет информацию в моем виджете TextView.
Кто-нибудь может посоветовать, как это сделать?
Спасибо
2 ответа
Решено - я могу подтвердить, что действие не требуется, если вы хотите создать кнопку для обновления Android AppWidget.
Я смог реализовать свой класс AppWidgetProvider таким образом, чтобы он регистрировал фильтр намерений android.appwidget.action.APPWIDGET_UPDATE с приемником Broadcast в AndroidManifest.xml, который затем запускает событие onUpdate в классе AppWidgetProvider (который, в свою очередь, затем запускается UpdateService).
<!-- Broadcast Receiver that will process AppWidget updates -->
<receiver android:name=".MyWidget" android:label="@string/widget_name">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider" android:resource="@xml/widget" />
</receiver>
UpdateService в моем классе AppWidgetProvider затем использует onHandleIntent для запуска частного метода buildUpdate, который регистрирует событие onClick с помощью вызова setOnClickPendingIntent следующим образом:
// set intent and register onclick
Intent i = new Intent(this, MyWidget.class);
PendingIntent pi = PendingIntent.getBroadcast(context,0, i,0);
updateViews.setOnClickPendingIntent(R.id.update_button,pi);
Вот ссылка на некоторый исходный код рабочего примера, который показывает, как кнопка обновления может использоваться для обновления виджета Twitter:
Кнопка поддерживается в appwidget, поэтому не уверен, в чем проблема. Посмотрите на этот пример того, как назначать действия через views.setOnClickPendingIntent(идентификатор R.id.YOURVIEW, yourIntent);
Объект RemoteViews (и, следовательно, виджет приложения) может поддерживать следующие классы макета:
FrameLayout LinearLayout RelativeLayout
И следующие классы виджетов:
Хронометр кнопки AnalogClock ImageButton ImageView ProgressBar TextView Потомки этих классов не поддерживаются.