Отображение экрана загрузки с помощью AsyncTask с ListActivity - PullRequest
0 голосов
/ 16 марта 2012

У меня есть приложение, которое использует ListActivity, чтобы предоставить пользователям список действий.Когда они нажимают один, я использую Intent для запуска отдельного действия.

Моя проблема заключается в том, что действия, выполняемые приложением, завершаются примерно за 20 секунд, и поскольку я не хочу, чтобы пользователь получалВ этом отвратительном диалоге ANR я пытался использовать AsyncTask, чтобы показать им загрузочный экран.Я попытался использовать setContentView(R.layout.loading); на onPreExecute(), но он выдает исключение NullPointerException, которое, насколько я понял, связано с тем, что loading.xml не является "ListView, чей идентификатор android.R.id.list".

Так что же мне теперь делать?Как я могу показать этот экран загрузки?Есть ли способ обойти эту довольно неприятную ситуацию?Любая помощь будет принята с благодарностью.Спасибо!

Ответы [ 3 ]

1 голос
/ 16 марта 2012

Я не уверен точно, каков ваш вариант использования;у вас есть список предметов, которые заполняются сразу, и при выборе одного из них действие выполняется?Действие, которое нужно предпринять, это запустить другое действие, которое выполняет фоновую обработку?

Или для заполнения списка действий требуется много времени?

Если первое, вы можете использовать AsyncTask для длительного действия вместо Intent для запуска другого Activity: inобратный вызов, который вы получаете за щелчок по рассматриваемому элементу, вы создаете AsyncTask, а в doInBackground вы выполняете длительную активность, при этом onPostExecute обновляет или манипулирует списком по мере необходимости.рассмотрите возможность использования диалогового окна для отображения экрана загрузки, если загрузка должна произойти до того, как вы запустите новое действие.

Если вы сможете более подробно описать ваш вариант использования, я могу помочь вам больше.

0 голосов
/ 16 марта 2012

Запустите и отобразите ваши диалоговые окна загрузки в onCreate () вызываемой операции, затем вызовите Dialog.dismiss () в onPostExecute () AsyncTask.

0 голосов
/ 16 марта 2012

Это не экран загрузки, который нужно иметь в AsyncTask, это инициализация 20-секундной активности. Я бы искал способ сделать все настройки в фоновом потоке в Сервисе, в то время как пользователь свободен весело поиграть в другие действия. Я бы постарался найти способ не останавливать пользователя на 20 секунд. Может быть, возьмите их в целевую активность и покажите им данные, кэшированные с момента их последнего посещения, пока новый набор не будет готов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...