2011-07-26 12 views
2

私は、RemoteViewを使ってListViewを表示するappwidgetを開発しています。簡単にするために、私はappwidgetの機能の類推を与えるでしょう:Android - AppWidget AppWidgetManager.updateAppWidget()がすぐに呼び出されない

  1. ユーザーは、ホーム画面にappwidgetを追加することを選択します。ウィジェットを選択すると、構成アクティビティが開始され、ユーザはレシピのリストから1つのレシピを選択する。
  2. 構成アクティビティからレシピを選択すると、構成アクティビティはAppWidgetManager.ACTION_APPWIDGET_UPDATEインテントをブロードキャストします。このインテントは、私のAppWidgetProviderクラスのonReceiveメソッドで受け取られ、処理されます。ここからRemoteViewがインスタンス化され、AppWidgetManager.updateAppWidget()メソッドに渡されます。これは、成分のListViewを埋めるために進む。

これは、appwidgetからListViewを手動で更新しようとする場合を除いて、すべて正常に動作します。私はPendingIntentを設定して、設定アクティビティを再起動します。これも動作します。残念ながら、AppWidgetManager.updateAppWidget()の呼び出しは、ホーム画面に追加したときに起動されたときと同じように即座に呼び出されず、ListViewは更新されません。ただし、リストをスクロールした後に更新が呼び出されます(キャッシュにロードされた行の数が渡されるまでは計算されます)。これはFlightBoardAppWidgetServiceとViewsFactoryを必要に応じて起動します。これは、updateAppWidgetがレイジーロードされたキューに入れられているかのようです。私はAppWidgetManager.updateAppWidget()がどのようにコード化されているかを見るためにAndroidのソースコードを見ようとしましたが、隠されているようです。

tl; dr: AppWidgetManager.updateAppWidget()は、即時に呼び出されるとは限りません。何が得られますか?

実際に呼び出されたときにListViewを更新する方法はありますか?私は間違って何をしていますか?ありがとう!

答えて

0

私は最終的に問題を解決しました。それはいくらかのハックですが、リフレッシュブロードキャストとアップデートブロードキャストを宣言することで問題を解決しました。 updateAppWidget()を呼び出すウィジェットを更新するたびに、このブロードキャストを受け取り、処理する関数から、notifyChangedを呼び出す別のブロードキャストを起動します。これはすべての時間の作品!

関連する問題