RemoteViewを使用してListViewを表示するアプリウィジェットを開発しています。簡単にするために、アプリウィジェットの機能の例えを示します。
- ユーザーは、アプリウィジェットをホーム画面に追加することを選択します。ウィジェットを選択すると、構成アクティビティが起動され、ユーザーはレシピのリストから1つのレシピから選択します。
- 構成アクティビティからレシピを選択すると、構成アクティビティはAppWidgetManager.ACTION_APPWIDGET_UPDATEインテントをブロードキャストします。このインテントは、AppWidgetProviderクラスのonReceiveメソッドで受信および処理されました。ここから、RemoteViewがインスタンス化され、AppWidgetManager.updateAppWidget()メソッドに渡されます。これは、材料のリストビューへの入力に進みます。
appwidgetからListViewを手動で更新しようとした場合を除いて、これはすべて期待どおりに機能します。構成アクティビティを再起動するようにPendingIntentを設定しましたが、これも機能します。残念ながら、AppWidgetManager.updateAppWidget()の呼び出しは、ホーム画面に追加したときに起動されたときのようにすぐには呼び出されず、ListViewは更新されません。ただし、リストを下にスクロールした後、更新が呼び出されます(キャッシュにロードされた行数が渡されるまで、私は推測します)。これにより、FlightBoardAppWidgetServiceとViewsFactoryが正常に起動します。これは、updateAppWidgetが遅延ロードされたキューに入れられているかのようです。Androidのソースコードを調べて、AppWidgetManager.updateAppWidget()がどのようにコーディングされているかを確認しようとしましたが、非表示になっているようです。
tl; dr: AppWidgetManager.updateAppWidget()が常に即座に呼び出されるとは限りませんが、何が得られますか?
ListViewが実際に呼び出されたときに更新する方法はありますか?私は何が間違っているのですか?ありがとう!