2012-02-17 1 views
0

При нажатии кнопки я вызываю класс async в функции, и мне нужно показать progressDialog, пока он не запустит функцию displaylist. Но он появляется только после того, как функция завершена и немедленно закрывается. Пожалуйста, помогите мне, что я делаю неправильно здесь.Диалоговое окно прогресса Android не отображается до тех пор, пока функция не завершится (AsyncTask)

public class FilterAsyncTask extends AsyncTask<Void, Void, Void> { 

    ProgressDialog dispProgress; 

    @Override 
     protected void onPreExecute() 
     { 
      dispProgress = ProgressDialog.show(Filter.this, "Please wait...", 
        "Loading...", true, true); 
     } 

     protected Void doInBackground(Void... params) { 

      return null; 
     } 

     protected void onPostExecute(Void result) { 
      super.onPostExecute(result); 

     MerchantsActivity.displayList(); 
      dispProgress.cancel(); 
      finish(); 
     } 

    } 
+0

Вы используете это как подкласс справа? –

+0

Да, я использую это как подкласс – user1178492

ответ

0

Я бы порекомендовал вам не использовать метод static ProgressDialog#show. Скорее сделайте new ProgressDialog() и инициализируйте его соответствующим образом и, наконец, позвоните show(). Я никогда не использовал статический метод и не знаю, как он работает, но я использовал другой вариант. Кроме того, у статического метода нет доступной документации.

+0

Я пробовал это, но не повезло. – user1178492

1

Ваш AsyncTask будет завершен немедленно, потому что вы ничего не сделали в doInBackground()! Вот где ваш длинный фоновый не-UI-код должен идти ...

+0

MerchantsActivity.displaylist() - это функция, которая требует много времени для загрузки. когда я помещаю эту функцию в doInBackground(), она выдает исключение во время выполнения. – user1178492

+0

Возможно, потому что это делает UI-файл, который может быть выполнен только в потоке пользовательского интерфейса. Вам необходимо переделать MerchantsActivity.displayList() в часть, которая может полностью работать в фоновом режиме (то есть в doInBackground), и часть, которая просто обновляет пользовательский интерфейс (который работает в onProgressUpdate и/или onPostExecute) –

+0

Спасибо. Это похоже на решение. Есть ли другой способ, которым я могу справиться с этим? .. потому что для его деления на части потребуется много изменений кода. – user1178492