Как отобразить диалоговое окно прогресса перед началом активности в Android? - PullRequest
34 голосов
/ 05 марта 2011

Как отобразить диалоговое окно прогресса перед началом действия (т.е. когда действие загружает некоторые данные) в Android?

Ответы [ 2 ]

64 голосов
/ 05 марта 2011

Вы должны загрузить данные в AsyncTask и обновить интерфейс после завершения загрузки данных.

Вы даже можете начать новое действие в методе AsyncTask onPostExecute().

Точнее, вам понадобится новый класс, расширяющий AsyncTask:

public class MyTask extends AsyncTask<Void, Void, Void> {
  public MyTask(ProgressDialog progress) {
    this.progress = progress;
  }

  public void onPreExecute() {
    progress.show();
  }

  public void doInBackground(Void... unused) {
    ... do your loading here ...
  }

  public void onPostExecute(Void unused) {
    progress.dismiss();
  }
}

Тогда в своей деятельности вы сделаете:

ProgressDialog progress = new ProgressDialog(this);
progress.setMessage("Loading...");
new MyTask(progress).execute();
3 голосов
/ 05 марта 2011

Когда вы запускаете длительный процесс на Android, всегда рекомендуется делать это в другом потоке.Затем вы можете использовать поток пользовательского интерфейса для отображения диалога прогресса.Вы не можете отобразить диалоговое окно прогресса в том же потоке (UI), в котором запущен процесс.

Для запуска процесса выполните следующие действия

pd = ProgressDialog.show(this, "Synchronizing data", "Please wait...");
Thread t = new Thread(this);
t.start();

Для этого в вашей деятельности должна быть реализована Runnable asследует

public class SyncDataActivity extends Activity implements Runnable

И, наконец, метод для выполнения длительного процесса

@Override
public void run() {
      //your code here
}
...