web-dev-qa-db-ja.com

Androidウィジェットにボタンを実装する方法

Android開発を始めたばかりで、ホーム画面にいくつかの情報を表示する素敵な小さなウィジェットを作成しました。しかし、情報を更新するウィジェットにボタンを実装したいと思います私のウィジェットのTextView。

誰でもこれを行う方法をアドバイスできますか?

ありがとう

23
bigtony

解決済み-Android AppWidget。を更新するためのボタンを作成する場合、アクティビティは不要であることを確認できます。

私はAppWidgetProviderクラスを実装して、Android.appwidget.action.APPWIDGET_UPDATEインテントフィルターをAndroidManifest.xmlのBroadcastレシーバーに登録し、AppWidgetProviderクラスのonUpdateイベントを発生させることができるようになりました。 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>

次に、AppWidgetProviderクラスのUpdateServiceは、onHandleIntentを使用してプライベートなbuildUpdateメソッドを実行します。

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

23
bigtony

ボタンはappwidgetでサポートされているため、問題が何かはわかりません。この例を見て、views.setOnClickPendingIntent(R.id.YOURVIEW ID、yourIntent);を介してアクションを割り当てる方法を確認してください。

RemoteViewsオブジェクト(および結果としてApp Widget)は、次のレイアウトクラスをサポートできます。

FrameLayout LinearLayout RelativeLayout

そして、次のウィジェットクラス:

AnalogClockボタンクロノメーターImageButton ImageView ProgressBar TextViewこれらのクラスの子孫はサポートされていません。

4
Alex Volovoy