6

構成アクティビティを含むアプリ ウィジェットがあり、アクティビティの [OK] ボタンがクリックされたときにウィジェットの更新をトリガーしたいと考えています。私はこのコードを書きました:

            Intent initialUpdateIntent=new Intent(AppWidgetManager.
                    ACTION_APPWIDGET_UPDATE);
            initialUpdateIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
                    widgetID);
            sendBroadcast(initialUpdateIntent);

しかし、何らかの理由で onUpdate 関数が呼び出されません! 問題が何であるかを知っている人はいますか?ありがとう。

4

2 に答える 2

19

次のことを試してください。

public static void updateWidgets(Context context) {
    Intent intent = new Intent(context.getApplicationContext(), DayActivitiesAppWidget.class);
    intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
    // Use an array and EXTRA_APPWIDGET_IDS instead of AppWidgetManager.EXTRA_APPWIDGET_ID,
    // since it seems the onUpdate() is only fired on that:
    AppWidgetManager widgetManager = AppWidgetManager.getInstance(context);
    int[] ids = widgetManager.getAppWidgetIds(new ComponentName(context, DayActivitiesAppWidget.class));

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        widgetManager.notifyAppWidgetViewDataChanged(ids, android.R.id.list);
    }

    intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids);
    context.sendBroadcast(intent);
}

この方法でクラスを置き換えDayActivitiesAppWidgetて、AppWidgetProviderすべてのウィジェットインスタンスを更新すると、単一のウィジェットインスタンスを更新することで問題を追跡できます。

于 2014-10-02T09:42:58.440 に答える
1

onReceive でブロードキャスト メッセージをキャッチしようとしていますか。

@Override
public void onReceive(Context context, Intent intent) {
    super.onReceive(context, intent);
    String strAction = intent.getAction();
    if (AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(strAction)) {
        /* Do update */
    }
}

それ以外の場合は、 ACTION_APPWIDGET_UPDATE を使用してウィジェットのビューを更新するロジックを明確にするのではなく、独自のメッセージを定義することをお勧めします。

<action android:name="com.yourdomain.youapp.SETTING_UPDATE" />

2.インテント名を定義します。

public static final String SETTING_UPDATE = "com.yourdomain.youapp.SETTING_UPDATE";

3.onReceive での処理:

@Override
public void onReceive(Context context, Intent intent) {
    super.onReceive(context, intent);
    String strAction = intent.getAction();
    if (SETTING_UPDATE.equals(strAction)) {
        /* Do update setting */
    }
}

それが役立つことを願っています^^

于 2012-05-19T11:26:33.743 に答える