Android не показывает ProgressDialog

Я пытаюсь показать ProgressDialog при загрузке Activity, но он не отображается.

Вот метод, вызываемый в Activity onCreate.

  private void loadBuilding(String[] b) {

        ProgressDialog pd = new ProgressDialog(this);
        pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        pd.setMax(6);

        pd.setTitle(R.string.loading);

        pd.show();

        LoadBuilding lb = new LoadBuilding();
        lb.initialize(this,  pd);

        lb.execute(b);

        try {
              lb.get();
        } catch (Exception e) {
              e.printStackTrace();
        } 

        pd.dismiss();

        if (building == null) 
              showError();
  }

LoadBuilding — это AsyncTask, в котором я загружаю здание и устанавливаю ход выполнения.

Спасибо всем.


person Marco Fedele    schedule 29.12.2012    source источник
comment
попробуйте удалить pd.dismiss() и все строки после него из вашего кода и поместить их в метод onPostExecute асинхронной задачи. Я думаю, что ваш диалог действительно показывается, но очень быстро закрывается.   -  person vortexwolf    schedule 29.12.2012


Ответы (2)


Проблема заключалась в том, что progressDialog.dismiss() должен находиться в:

  • catch для try/catch показан в коде
  • Метод onPostExecute для AsyncTask.

Кроме того, я использую слишком мало данных для тестирования, поэтому они появляются и исчезают слишком быстро.

person Marco Fedele    schedule 29.12.2012

Используйте AsyncTask для фоновой обработки и обновления на переднем плане. Я думаю, что это лучше всего подходит для вашей задачи.

private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
 protected Long doInBackground(URL... urls) {
     int count = urls.length;
     long totalSize = 0;
     for (int i = 0; i < count; i++) {
         totalSize += Downloader.downloadFile(urls[i]);
         publishProgress((int) ((i / (float) count) * 100));
         // Escape early if cancel() is called
         if (isCancelled()) break;
     }
     return totalSize;
 }

 protected void onProgressUpdate(Integer... progress) {
     setProgressPercent(progress[0]);
 }

 protected void onPostExecute(Long result) {
     showDialog("Downloaded " + result + " bytes");
 }
}

Попробуйте добавить свой progressDismiss() в блок try and catch

try
 {
   pg.dismiss();
  }
Catch()
{
 }
person Vikalp Patel    schedule 29.12.2012