1

タブのデータをフェッチするために onCreate() で AsyncTask を開始する TabContentFactory を実装する TabActivity があります。AsyncTask が終了したら、onPostExecute() は UI 要素を直接更新できますよね? つまり、そのメソッドは UI スレッドで実行されるため、UI 要素にアクセスするときにそれ以上のスレッド同期は必要ないのでしょうか?

とにかく、私が抱えている問題は、AsyncTask がまだビジーである間に、UI スレッドが TabActivity で createTabContent() を呼び出すことです。少なくとも 1 つのタブを追加する必要があります。そうしないと、NullPointerException が発生します。しかし、AsyncTask が終了し、ProgressDialog が閉じられたときにのみタブを追加するにはどうすればよいでしょうか?

どなたか助けていただけると嬉しいです...

4

1 に答える 1

1
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.

AsyncTask がまだバックグラウンドで実行されている間に UI を更新する必要がある場合は、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?

私はこれを理解していません。詳しく説明していただけますか?

とにかく、次のことに注意してください。

  1. TabActivity が完全に作成された後にのみ、AsyncTask を開始します。onCreate() ではなく onPostCreate() から開始します。これが NullPointerException の原因である可能性があります。
  2. AsyncTask.onPostExecute(..) 内の UI スレッドから任意のアクティビティを更新できます。
  3. AsyncTask がまだバックグラウンドで実行されている間に UI を更新する必要がある場合は、AsyncTask.doInBackground(..) 内から AsyncTask.publishProgress(..) を呼び出します。
于 2010-10-23T18:23:18.327 に答える