2

ウィジェットを含むAndroidアプリケーションに取り組んでいます。アプリのメインインターフェイスは単純なアクティビティですが、ユーザーがアクティビティで実行できる操作の中には、ウィジェットを更新する必要があるものがあります。つまり、onUpdateメソッドを実行します。

アクティビティからこのメソッドをトリガーするにはどうすればよいですか?他の 質問を見ると、レイアウトを変更するコードを書くことができましたが、onUpdateを実行していないようです(空のレイアウトが残っており、onUpdate中に追加されたデータがないため)。

アイデアやコードサンプルは大歓迎です!

4

1 に答える 1

10

私はまだ Android に慣れていませんが、次の 3 つの手順でこれを達成しました。

まず、AppWidgetProvider.onUpdate の内容をメソッド ( myUpdate(Context)) に入れます。

次に、AppWidgetProvider.onReceive() を次のようにオーバーライドしました。

public void onReceive(final Context context, final Intent intent)
{
    super.onReceive(context, intent);

    if (MY_PUBLIC_STATIC_STRING.equals(intent.getAction()))
    {
        myUpdate(context);
    }
}

3 番目に、他のアクティビティから、インテントに設定されたアクションを含む一般的なブロードキャストを送信するだけです。

Intent updateWidgetIntent = new Intent(context, MyWidget.class);
updateWidgetIntent.setAction(MyWidget.MY_PUBLIC_STATIC_STRING);
context.sendBroadcast(updateWidgetIntent);

これには、onUpdate が提供する素敵なインターフェイスの代わりに、コンテキストとアプリ ウィジェット ID から自分で AppWidgetManager を見つけなければならないという欠点があります。したがって、これが正しいアプローチであることに懐疑的です。幸運を祈ります。

myUpdate(Context) は次のように始まります。

AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
int[] appWidgetIds =
    appWidgetManager.getAppWidgetIds(new ComponentName(context, this.getClass()));
于 2011-04-25T21:38:54.320 に答える