9

そのため、onUpdate メソッド呼び出し

remoteViews.setRemoteAdapter(id, R.id.listview, intent)

ウィジェットのリストビューにアダプターを適用するため。

ウィジェットのヘッダーには、リストビューで表示されるデータ セットを変更できるボタンがあります (架空の電子メール ウィジェットの受信トレイ、送信トレイ、スター付きなどを考えてください)。そのボタンをクリックすると、ユーザーはアクティビティに移動し、表示するデータ セットを選択できます。選択が行われると、次のコードが実行されます。

Intent intent = new Intent(this, WidgetReceiver.class);
intent.setAction("android.appwidget.action.APPWIDGET_UPDATE");
intent.putExtra("notify", true);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, new int[] {R.xml.widget_provider});
sendBroadcast(intent);

これにより、ウィジェットの AppWidgetProvider クラスの onUpdate メソッドが正常に呼び出されます。ただし、さまざまなタイプのデータ セットを切り替えると、設定を 2 ~ 3 回変更すると、setRemoteAdapterメソッドが機能しなくなります。私はプロセスを広範囲にログに記録しました。サービスを呼び出すことになっているメソッドは、RemoteViewsService.RemoteViewsFactoryクラスをロードしてウィジェットとそのアダプターを設定しますが、これらのことは何もしません。設定を変更した最初の数回は、期待どおりに機能します。しかしその後やめてしまう。

ここで何が起こっているのか、誰にも手がかりがありますか?

4

3 に答える 3

14

奇妙ですが、解決策が見つかりました。Android は、onUpdate メソッドで使用するインテントをキャッシュしているようです。同じインテントと思われるものを再送信すると、期待どおりに動作しません。

解決策: インテント エクストラにパラメーターとして含める静的反復整数を用意します。それは私にとって問題を解決しました。

Intent intent = new Intent(context, WidgetService.class);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, currentWidgetId);
intent.putExtra("random", randomNumber);
randomNumber++;
intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));

あ、アンドロイド…

于 2012-11-02T22:32:19.500 に答える
2

私はしばらく前にこの問題に直面しました。乱数を使用したこのアプローチも役立ちました。

于 2013-03-05T12:34:30.277 に答える