7

私のアプリウィジェットはいくつかのモードで機能します。これらのモードごとに、を作成しましたRemoteViewsFactory。モードを切り替えるために、インテントをに送信しますAppWidgetProvider。それを受け取ったら、を作成して'sRemoteViewsに渡します。コレクションビューのを設定するには、 ' :を呼び出します。AppWidgetManagerupdateAppWidget()RemoteViewsFactoryRemoteViewssetRemoteAdapter()

rv.setRemoteAdapter(appWidgetId, R.id.widget_view_flipper, intent);

R.id.widget_view_flipperコレクションビューでintentありRemoteViewsService、適切なファクトリを構築するためのものです。

編集:最初に説明した問題を理解したので、質問を編集しました。これで、ファクトリを変更するgetViewAt()と、変更後に新しいファクトリのが呼び出されますが、コレクションビューの要素は更新されません。それはどのように起こりますか?

今のところ、私が思いついたのは、工場での交換後、遅れてAppWidgetManagerのnotifyAppWidgetViewDataChangedを呼び出すことができるということだけです。これにより、ビュー内の要素が醜い点滅で更新されます。

4

2 に答える 2

13

半日掘り下げた後、回避策を思いつきました。

ウィジェットを更新してファクトリを置き換える必要がある場合は、AppWidgetProvider で次の操作を行います。

appWidgetManager.updateAppWidget(appWidgetIds[i], null);
appWidgetManager.updateAppWidget(appWidgetIds[i], rv);  

ここで、rv は新しい RemoteView です。

古い RemoteViews は AppWidgetHostView にキャッシュされているため、キャッシュされたデータを取り除くことができます。

于 2012-10-22T18:25:42.097 に答える