Android: TabActivity - не добавлять вкладки до завершения AsyncTask - PullRequest
1 голос
/ 23 октября 2010

У меня есть TabActivity, реализующее TabContentFactory, которое запускает AsyncTask в onCreate () для извлечения данных для вкладок. Когда AsyncTask закончил, onPostExecute () мог напрямую обновить элементы интерфейса, верно? То есть, поскольку этот метод выполняется в потоке пользовательского интерфейса, при доступе к элементам пользовательского интерфейса дополнительная синхронизация потока не требуется?

В любом случае, у меня проблема в том, что мой UI-поток вызывает метод createTabContent () в TabActivity, пока AsyncTask все еще занят. Я должен добавить хотя бы одну вкладку, или я получаю исключение NullPointerException. Но как добавить вкладки, только когда мой AsyncTask завершен, а ProgressDialog отклонен?

Я был бы рад, если бы кто-то мог помочь ...

1 Ответ

1 голос
/ 23 октября 2010
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 все еще работает в фоновом режиме, переопределите AsyncTask.onProgressUpdate (..) и затем вызовите AsyncTask.publishProgress (..) из AsyncTask.doInBackground (..).

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. Запустите AsyncTask только после полного создания TabActivity. Запустите его из onPostCreate () вместо onCreate (). Это может быть источником вашего исключения NullPointerException.
  2. Вы можете обновить любые действия из потока пользовательского интерфейса в AsyncTask.onPostExecute (..)
  3. Если вам нужно обновить пользовательский интерфейс, когда AsyncTask все еще работает в фоновом режиме, то вызовите AsyncTask.publishProgress (..) из AsyncTask.doInBackground (..)
...