Подтвердить что ты не робот

Как реализовать кнопку на Android-виджете

Я только начинаю разработку Android, и я создал красивый маленький виджет, который отображает некоторую информацию на моем домашнем экране. Однако теперь я хочу реализовать кнопку на моем виджете, которая обновляет информацию в моем виджетах TextView.

Кто-нибудь может посоветовать, как это сделать?

Спасибо

4b9b3361

Ответ 1

Решено - я могу подтвердить, что действие НЕ требуется, если вы хотите создать кнопку для обновления 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

Ответ 2

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

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

FrameLayout LinearLayout RelativeLayout

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

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