Android: TabActivity - Adicionar sem guias antes que o AsyncTask termine
-
25-09-2019 - |
Pergunta
Eu tenho uma TabActivity implementando o TabContentFactory, que inicia um assíncrono no OnCreate () para buscar os dados para as guias. Quando o AsyncTask terminar, o OnPostexecute () poderia atualizar diretamente os elementos da UI, certo? Ou seja, como esse método é executado no U-thread, não seria necessário mais sincronização de threads ao acessar os elementos da UI?
De qualquer forma, o problema que tenho é que meu thread da UI-thread CreateTabContent () na TabActivity enquanto o AsyncTask ainda está ocupado. Eu tenho que adicionar pelo menos uma guia ou recebo uma nullpointerException. Mas como eu só adiciono guias quando minha assíncada terminou e o progressodialog foi demitido?
Eu ficaria feliz se alguém pudesse ajudar ...
Solução
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?
Certo.
Anyway, the problem I have is that my UI-Thread calls createTabContent() in the
TabActivity while the AsyncTask is still busy.
Se você precisar atualizar a interface do usuário enquanto o AsyncTask ainda estiver em execução em segundo plano, substitua asynctask.onProgressupdate (..) e ligue para asynctask.publishProgress (..) de dentro do assínctask.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?
Eu não entendo isso. Você poderia explicar com mais detalhes?
Enfim, cuidado com isso:
- Inicie o assíncrono somente após a criação da TabActividade. Inicie -o no OnPostCreate () em vez de onCreate (). Isso pode ser uma fonte da sua NullPointerException.
- Você pode atualizar quaisquer atividades do thread da interface do usuário no assynctask.onpostexecute (..)
- Se você precisar atualizar a interface do usuário enquanto o AsyncTask ainda estiver em execução em segundo plano, ligue para asynctask.publishprogress (..) de dentro do assínctask.doinbackground (..)