2011-03-05 20 views
31

Androidでアクティビティを開始する前に(つまり、アクティビティがデータを読み込んでいる間に)進行状況ダイアログを表示するにはどうすればよいですか?Androidでアクティビティを開始する前に進捗ダイアログを表示する方法は?

+0

あなたがあなたの質問の前に持っているスペースを削除する必要があります。..コードブロックとして取り上げられて、あなたの質問を読みにくくしています。 – DTing

答えて

60

​​にデータを読み込み、インターフェースを更新する必要がありますデータの読み込みが完了したとき。

AsyncTaskのonPostExecute()メソッドで新しいアクティビティを開始することさえできます。あなたはどうしたら自分の活動に続いて

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(); 
    } 
} 

具体的には、あなたはAsyncTaskを拡張する新しいクラスが必要になります

ProgressDialog progress = new ProgressDialog(this); 
progress.setMessage("Loading..."); 
new MyTask(progress).execute(); 
+0

ありがとう:)あなたの答えは働いた。 – Neha

+0

ちょっとお返事ありがとうございます、私はまさにこれをやっていますが、電話機が横向きになっているときには何らかの理由でprogressDialogがポップアップしますが、縦向きのときはポップアップしません。これに関するアイデアはありますか? 私は、最初のクラス(myTaskを呼び出すクラス)からダイアログを開始しようとしましたが、同じ問題が残っています。 ダイアログがポートレートモードで動作することもありますが、フォーカスが外れているように見えます。これは10回の試行で1回だけ発生します。 – Art

2

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

public class SyncDataActivity extends Activity implements Runnable 

そして最後に、長時間実行プロセス

@Override 
public void run() { 
     //your code here 
} 
を実行する方法を次のようにこれはあなたの活動はRunnableを実装する必要があるため、次の

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

あなたのプロセスを開始しています

+0

スレッドを使用する場合は、UIスレッドでタスク後コードを実行するなど、さまざまなことを管理する必要があります。 –

+0

Matthew ... AsyncTaskでsetDaemonをtrueに設定できますか? – JAL

+0

こんにちは、皆さんにお伝えしましたが、それでも動作しませんでした。私は下に私のコードを掲載しています。誰でも私が間違っていることを教えてもらえますか? – Neha

関連する問題