2012-03-05 30 views
0

私はアンドロイドとjavaで新しいです。進捗ダイアログを正しく実装するのに問題があります。アンドロイドで進捗ダイアログを正しく処理する方法は?

私はこの

ProgressDialog dialog= new ProgressDialog(Main.this); 
    dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
    dialog.setMax(100); 
    dialog.show(); 
    MY METHOD WHICH GRABS DATA FROM INTERNET; 
    dialog.dissmiss(); 

のようなコードを持っているが、これを実装することにより、私の方法はうまく動作しますが、進行状況ダイアログが表示されていない、再び私は却下方法、ダイアログdoesntの停止をコメントアウトするとき、私がしなければなりませんでした強制的に、このダイアログを使用するアプリを閉じますか?任意のスレッドをここに持ってきたいのではありませんが、スレッドなしでダイアログを使用する方法はありますか?ありがとう

+0

[これは完璧なガイドです](http://developer.android.com/guide/topics/ui/dialogs.html#ProgressDialog) – Ruuhkis

答えて

4

インターネットからデータを取得するなどの長時間実行されるタスクは別のスレッド内で実行する必要があります。そうしないと、コードが5秒以上実行されるとANRが発生する可能性があります。理想的な解決策は、AsyncTaskを実装することです。別のスレッドでタスクを実行できるようにして、ProgressDialogまたはProgressBarを表示して、あなたのアプリが現在ビジー状態であることをユーザーに知らせるUIスレッドを簡単に更新できます。 ProgressDialogの初期化コードをonPreExecute()のメソッドAsyncTaskに、dialog.dismiss()onPostExecute()にそれぞれコールしてください。お役に立てれば。

+0

ありがとう私はこの1つを試して、私はあなたにお知らせします –

+0

asynctaskに適切な例を教えてください。 –

+0

@SabbirAhmedはい、この投稿は役に立ちました:http://developer.android.com/resources/articles/painless-threading.html – Egor

1

はい、スレッドクラスを使用する必要はありません。代わりにAsyncTaskを使用できます。 AsyncTaskを呼び出すときに進行状況ダイアログを開始し、postExecuteメソッドでそれを閉じます。

1

私は個人的に進捗ダイアログのAsyncTaskを好みます。

あなたのonPreExecuteで上記のコードを作成してください。 doInBackgroundでは、あなたのバックグラウンドタスクを実行し、onPostExecuteで、完了したという警告ダイアログを表示します!

+0

私はあなたが言ったことを行ったが、onPreExecuteメソッドのdialodは解雇されず、backgrond仕事が起こっていない –

+0

あなたのdoInBackgroundで、あなたの仕事が完了した後にdialog.dismiss()と言うべきです。 –

+0

onPreExecuteでそれを却下しないでください –

関連する問題