Как реализовать кнопку на виджете 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:

https://github.com/commonsguy/cw-advandroid/tree/b01438e7f0fed8f795ddec4be43066905f03d0cc/AppWidget/TwitterWidget

Кнопка поддерживается в appwidget, поэтому не уверен, в чем проблема. Посмотрите на этот пример того, как назначать действия через views.setOnClickPendingIntent(идентификатор R.id.YOURVIEW, yourIntent);

Объект RemoteViews (и, следовательно, виджет приложения) может поддерживать следующие классы макета:

FrameLayout LinearLayout RelativeLayout

И следующие классы виджетов:

Хронометр кнопки AnalogClock ImageButton ImageView ProgressBar TextView Потомки этих классов не поддерживаются.

Другие вопросы по тегам