2011-07-26 31 views
2

我正在開發一個appwidget,它使用RemoteViews來顯示一個ListView。爲了簡單起見,我將對appwidget的功能進行類比:Android - AppWidget AppWidgetManager.updateAppWidget()不立即被調用

  1. 用戶將選擇將appwidget添加到主屏幕。選擇小部件後,配置活動啓動,用戶從配方列表中選擇一個配方。
  2. 從配置活動中選擇配方後,配置活動廣播AppWidgetManager.ACTION_APPWIDGET_UPDATE意圖。這個意圖在我的AppWidgetProvider類的onReceive方法中接收和處理。從這裏,RemoteView被實例化並傳遞到AppWidgetManager.updateAppWidget()方法中。這將繼續填充成分的ListView。

這一切都按預期工作,除非我嘗試手動更新appwidget的ListView。我已經設置了一個PendingIntent來重新啓動配置活動,這也起作用。不幸的是,對AppWidgetManager.updateAppWidget()的調用並不像它在將它添加到主屏幕時啓動時那樣立即被調用,並且ListView沒有得到更新。然而,更新並沒有被調用,但是,在向下滾動列表之後(直到它通過它已經加載到它的緩存中的行數,我認爲)。這應該會引發我的FlightBoardAppWidgetService和ViewsFactory。這幾乎就像updateAppWidget進入一些延遲加載隊列一樣。我試着查看Android源代碼以查看AppWidgetManager.updateAppWidget()是如何編碼的,但似乎隱藏了。

tl; dr: AppWidgetManager.updateAppWidget()並不總是立即被調用,給出了什麼?

有沒有什麼辦法讓ListView在實際調用時更新?我究竟做錯了什麼?謝謝!

回答

0

嗯,最後我終於解決了這個問題。這有點破解,但我最終通過宣佈刷新廣播和更新廣播來解決問題。每次我想更新小部件時,我都會調用updateAppWidget(),然後從接收和處理此廣播的函數中啓動另一個調用notifyChanged的廣播。這一直在工作!