2011-12-22 44 views
1

我有一個ListViewActivity使用AsyncTask加載數據庫中的數據。此活動有一個選項菜單,用於檢查onPrepareOptionsMenu()中活動列表視圖中是否有任何數據項。從AsyncTask刷新ActionBar

如果有項目,我啓用ActionBar上顯示的允許用戶刪除項目的選項之一。

現在,當活動啓動時,AsyncTask啓動,並且在AsyncTask仍在運行時運行onPrepareOptionsMenu(),此菜單項從未啓用,除非設備被翻轉並且listview數據作爲實例,繞過AsyncTask。

所以,在的AsyncTask的onPostExecute(),我叫invalidateOptionsMenu(),但似乎並沒有被刷新菜單(我在onCreateOptionsMenu()onPrepareOptionsMenu()調試代碼,也不被觸發)。任何幫助讚賞。

+0

按正確它應該工作。不明白爲什麼它不應該是你的asynctask是當前活動的內部類?還是單獨上課? – Rejinderi 2011-12-22 02:21:57

+0

當前活動的內部類 – 2011-12-22 02:30:15

+1

我假設你正在調用'MyActivity.this.invalidateOptionsMenu()'對嗎?你可以嘗試我的建議和調試? – Rejinderi 2011-12-22 02:35:09

回答

0

該問題與壞的全局變量值有關。我用onPrepareOptionsMenu()方法編寫了一個全局布爾值的代碼,該代碼從來不是真的,並且將調試語句INSIDE置於布爾檢查中......導致調試語句從不運行。

解決了這個問題後,一切都按預期工作,上面的代碼是正確的。

1

您可以嘗試在您的活動和onPostExecute()上創建一個像haveData這樣的全局布爾值,相應地將布爾值設置爲true或false。然後根據布爾值對您的onPrepareOptionsMenu()進行檢查並相應地啓用菜單項。

我最後一次嘗試它爲我工作不知道爲什麼它不適合你。如果不起作用,請從那裏進行調試,告訴我們它不在哪裏執行。

+0

它幫了我很多,謝謝 – Shajo 2015-01-25 12:12:04