Как реализовать кнопку на виджете Android - PullRequest
23 голосов
/ 18 января 2010

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

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

Спасибо

Ответы [ 2 ]

23 голосов
/ 19 января 2010

Решено - я могу подтвердить, что действие не требуется, если вы хотите создать кнопку для обновления Android AppWidget.

Мне удалось реализовать мой класс AppWidgetProvider так, чтобы он регистрировал фильтр намерений android.appwidget.action.APPWIDGET_UPDATE с приемником Broadcast в AndroidManifest.xml, который затем запускает событие onUpdate в классе AppWidgetProvider ( Затем запускается служба обновлений).

<!-- 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

4 голосов
/ 18 января 2010

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

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

FrameLayout LinearLayout RelativeLayout

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

Аналоговый кнопочный хронометр ImageButton ImageView ProgressBar TextView Потомки этих классов не поддерживаются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...