When the AsyncTask has finished, onPostExecute() could directly update the
UI-elements, right? Meaning, since that method runs in the UI-Thread no further
thread-synchronization would be required when accessing UI-elements?
權。
Anyway, the problem I have is that my UI-Thread calls createTabContent() in the
TabActivity while the AsyncTask is still busy.
如果您需要更新UI時的AsyncTask仍在後臺運行,然後覆蓋AsyncTask.onProgressUpdate(..),然後調用來自AsyncTask.doInBackground內AsyncTask.publishProgress(..)(..) 。
I have to add at least one tab, or I get a NullPointerException. But how do I
only add tabs when my AsyncTask has finished and the ProgressDialog has been
dismissed?
我不明白這一點。你能否詳細解釋一下?
總之,看這件事情:
- 開始的AsyncTask之後才完全創建TabActivity。從onPostCreate()開始,而不是onCreate()。這可能是你的NullPointerException的一個來源。
- 可以內AsyncTask.onPostExecute(..)
- 更新從UI線程的任何活動。如果您需要更新UI時的AsyncTask仍在後臺運行,然後從內部的AsyncTask調用AsyncTask.publishProgress(..)。 doInBackground(..)
嗨,謝謝你的回答!你說我應該在完全創建TabActivity之後才啓動AsyncTask - 這正是我的問題。我不想在AsyncTask完成之前顯示任何選項卡。 : -/ – cody 2010-10-23 18:39:29
我忘記解釋了:一切正常,我只想讓UI線程等待數據。我考慮用包含一個空ScrollView的5個選項卡初始化TabActivity,然後在AsyncTask.onPostExecute(..)中向這些選項添加內容。但我不確定這是否會奏效......? – cody 2010-10-23 18:47:57
它應該工作。小部件初始化後,您可以隨時添加/更改內容。爲了方便用戶,您應該顯示ProgressBar並在加載後將其替換爲內容。隨着內容可用,您可以逐步更新(選項卡之後的選項卡)。見上面第3點。 – 2010-10-23 19:01:58