web-dev-qa-db-ja.com

Androidでアクティビティを開始する前に進捗ダイアログを表示する方法

Androidでアクティビティを開始する前に(つまり、アクティビティがデータをロードしている間に)進捗ダイアログをどのように表示しますか?

34
Neha

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();
64
Matthew Willis

Androidで実行時間の長いプロセスを開始する場合、別のスレッドで実行することを常にお勧めします。その後、UIスレッドを使用して進行状況ダイアログを表示できます。プロセスが実行されているのと同じ(UI)スレッドで進行状況ダイアログを表示することはできません。

以下を実行してプロセスを開始します

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

このため、アクティビティはRunnableを次のように実装する必要があります

public class SyncDataActivity extends Activity implements Runnable

そして最後に、長期実行プロセスを実行する方法

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