1

ウィジェットを自分のアプリケーションに実装し始めましたが、アプリケーションからウィジェットにデータを取得するのに問題があります。

これが私のウィジェットのコードです:

public class ElectricityMonitorWidgetProvider extends AppWidgetProvider {

    public static final String WIDGETTAG = "WidgetMood";

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager,
            int[] appWidgetIds) {
        super.onUpdate(context, appWidgetManager, appWidgetIds);

        System.out.println("Widget onUpdate called..");

        final int N = appWidgetIds.length;

        // Perform this loop procedure for each App Widget that belongs to this provider
        for (int i=0; i<N; i++) {
            int appWidgetId = appWidgetIds[i];
            System.out.println("In loop. App widget id: "+appWidgetId);
        }
    }    
}

私のウィジェットには、アプリケーションからの数値で更新したいテキストビューしかありません。アプリケーションは、Web リクエストを介してこの番号を取得します。

定期的に実行されるonUpdate()メソッドでは、その 1 つのテキストビューを更新できるようにしたいと考えています。

これを達成する方法がわかりません。

ウィジェットが呼び出すヘルパー クラスを実装する必要がありますか?また、そのヘルパー クラス内に、アプリケーションが使用するデータを受け取るために使用するのと同じメソッドがありますか?

ウィジェットを実装するのはこれが初めてです。developer.android.com のウィジェットに関するガイドを読みましたが、ウィジェットを携帯電話に表示するのに役立ちました。私が欠けている唯一のものは、私が説明する機能です。

助けてくれてありがとう。

4

1 に答える 1

2

これをウィジェット更新ループに入れてください

for (int i=0; i<N; i++) {
  int appWidgetId = appWidgetIds[i];
  int value = i; //replace with actual value eg from SharedPreferences
  RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.your_widget);
  remoteViews.setTextViewText(R.id.text_view, String.valueOf(value)); //assumed that R.layout.your_widget contains a TextView with R.id_text_view id

  appWidgetManager.updateAppWidget(appWidgetId, remoteViews);
  System.out.println("In loop. App widget id: "+appWidgetId);
}

このコードは、ユーザーがウィジェットに触れたときのアクションを指定していないことに注意してください (通常、PendingIntent を指定してRemoteViews.setOnClickPendingIntentメソッドでフックする必要があります)。

また、定期的ではなく、必要に応じてウィジェットを更新することをお勧めします。たとえば、アプリはカスタム インテントを AppWidgetProvider に送信できます。これにより、それがオーバーライドされて処理されonReceive()、ウィジェットの RemoteViews が更新されます。

于 2013-11-06T22:49:05.723 に答える