Android: Tabactivity - Добавить вкладки, прежде чем AsynCtaske закончится
-
25-09-2019 - |
Вопрос
У меня есть табуактивность, реализующая TABContentactory, которая запускает асинктюсс в OnCreate (), чтобы получить данные для вкладок. Когда асинктика закончила, OnPostexecute () может напрямую обновить пользовательские элементы, верно? Смысл, поскольку этот метод работает в пользовательском потоке, не требуется дальнейшее синхронизация потоков при доступе к элементам UII?
Во всяком случае, проблема, в которой у меня есть, это то, что мой пользовательский ui-Thread вызывает CreateTabcontent () в табакете, когда Asynctask все еще занята. Я должен добавить хотя бы одну вкладку, или я получаю nullpointerexception. Но как я добавляю только вкладки, когда моя асинктюсса закончилась, и прогрессированная программа была уволена?
Я был бы рад, если кто-то может помочь ...
Решение
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.onprogressuppdate (..) а затем вызовите 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?
Я не понимаю это. Не могли бы вы объяснить более подробно?
Во всяком случае, следите за такими вещами:
- Запустите асинктику только после того, как табака полностью создана. Начните его из OnPostCreate () вместо OnCreate (). Это может быть источником вашего NullPointerexception.
- Вы можете обновить любые виды деятельности от UI TOTEN в Asyncack.onpostexecute (..)
- Если вам нужно обновить пользовательский интерфейс, пока Asynctask по-прежнему работает в фоновом режиме, то вызовите ASYNCASK.PUBLISHPROGRESS (...) изнутри asynctask.doinbackground (..)