#android
Мне нужно загрузить данные из базы данных в ArrayList, вo втором потоке, сопровождая выгрузку DialogFragment'ом. При помощи чего это можно сделать? Хотел сделать через IntentServise, но он не дружит с List'ами (насколько я понял). Проповал запустить выгрузку во втором потоке, остановивши первый, но ProgressDialog спит с основным потоком. Даже пробовал сделать все в основном потоке, но ProgressDialog не успевает запуститься и зависает с основным потоком...
Ответы
Ответ 1
Делается это через AsyncTask, примерная схема такая: Создаем класс наследующий от AsyncTask В конструкторе класса создаем ProgressDialog В методе onPreExecute() показываем диалог progressDialog.show(), проводим другие мероприятия - подготовку у чтению БД и проч. В методе doInBackground() организуем чтение данных из БД в цикле и в ходе чтения вызываем this.publishProgress(), который будет вызывать onProgressUpdate() (см. ниже) В методе onProgressUpdate() увеличиваем счетчик progressDialog.setProgress() В методе onPostExecute() закрываем счетчик progressDialog.dismiss()Ответ 2
Попробуйте сделать через AsyncTask, у него есть методы onPreExecute и onPostExecute, которые выполняются соответственно, перед и после doInBackground на UI потоке (точнее на потоке, который вызвал execute() у AsyncTask). Показывайте и прячте ваш DialogFragment в этих методах, а загрузку из базы сделайте в doInBackground
Комментариев нет:
Отправить комментарий