2

RemoteViewを使用してListViewを表示するアプリウィジェットを開発しています。簡単にするために、アプリウィジェットの機能の例えを示します。

  1. ユーザーは、アプリウィジェットをホーム画面に追加することを選択します。ウィジェットを選択すると、構成アクティビティが起動され、ユーザーはレシピのリストから1つのレシピから選択します。
  2. 構成アクティビティからレシピを選択すると、構成アクティビティは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が実際に呼び出されたときに更新する方法はありますか?私は何が間違っているのですか?ありがとう!

4

1 に答える 1

0

さて、ようやく問題を解決することになりました。ややハックですが、リフレッシュブロードキャストとアップデートブロードキャストを宣言することで問題を解決することができました。ウィジェットを更新するたびに、updateAppWidget()を呼び出し、このブロードキャストを受信して​​処理する関数から、notifyChangedを呼び出す別のブロードキャストを起動します。これは常に機能します!

于 2011-09-22T17:57:43.603 に答える