10

シンプルなアプリウィジェットがあり、(同じアプリ内の)アクティビティでアクションが発生したときに更新したいと思います。onUpdate()で、ウィジェットをすぐに更新します。これは正常に機能します。私のアクティビティでは、ビューを更新するためにonUpdate()で呼び出されるのと同じ静的更新メソッドをappwidgetで呼び出します。ウィジェットは更新されません。

コードをAppWidgetManager.updateAppWidget()メソッドに直接トレースできますが、ウィジェットは更新されません。

私が見ることができる唯一の可能な違いは、静的更新メソッドに渡されるコンテキストオブジェクトが、アクティビティのコンテキストとappwidgetのonUpdate()メソッドのコンテキストから呼び出された場合に異なることです。ただし、このWebには多くの例があるので、機能するはずです。

4

2 に答える 2

23

あなたのコードを見ずに、あなたがそれをどのように行おうとしているのか100%確信が持てませんが、これが私が使用する方法です。私の中で私Activityは次の方法を持っています:

private void updateAllWidgets(){
    AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(getApplicationContext());
    int[] appWidgetIds = appWidgetManager.getAppWidgetIds(new ComponentName(this, MyWidget.class));
    if (appWidgetIds.length > 0) {
        new MyWidget().onUpdate(this, appWidgetManager, appWidgetIds);
    }
}

MyWidgetappwidgetのクラスはどこにありますか。このメソッドを自分のどこからでも呼び出して、Activityすべてのアプリウィジェットを更新できます。

于 2010-12-12T23:47:11.337 に答える
10

静的メソッドを使用するのではなく、ウィジェットがすでにブロードキャストレシーバーであるという事実を利用して、マニフェストにウィジェットの更新インテントを登録します。その後、アクティビティから更新する必要があるときはいつでも、

//in your activity
sendBroadcast(new Intent(MyWidget.ACTION_UPDATE).putExtra(whatever));  



//In widget class
public static final String ACTION_UPDATE = "com.example.UPDATE_MY_WIDGET";

マニフェストファイルのレシーバータグ内

<intent-filter>
  <action android:name="com.example.UPDATE_MY_WIDGET"/>
</intent-filter>
于 2010-12-12T23:57:55.603 に答える