ProgressDialog を示す静的メソッドを記述し、ワーカーをスレッドで実行し、ワーカーが終了した後に ProgreesDialog を閉じる必要があり、私のメソッドはワーカーが行ったことを返す必要があります。これは私のコードです:
public static TOut execute(最終コンテキスト c、最終文字列タイトル、最終文字列メッセージ、最終 IProgressWorker ワーカー、最終 TIn パラメータ)
{
最終的な ValueHolder 結果 = 新しい ValueHolder();
最終的な ProgressDialog の進行状況 = 新しい ProgressDialog(c,R.layout.progress_impl_layout);
スレッドのメイン = 新しいスレッド (新しい Runnable(){
@オーバーライド
public void run() {
Looper.prepare();//新しい Looper を作成して、progressDialog をすぐに表示します
最終ルーパー looper=Looper.myLooper();
AsyncTask async = 新しい AsyncTask(){
@オーバーライド
protected void onPostExecute(ブール値の結果) {
super.onPostExecute(結果);
isDone = true;
looper.quit();// Looper.loopを終了
プログレス.却下();
}
@オーバーライド
保護されたボイド onPreExecute() {
super.onPreExecute();
progress.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progress.setTitle(タイトル);
progress.setMessage(メッセージ);
プログレス.ショー();
}
@オーバーライド
protected Boolean doInBackground(Integer... params) {
IProgressImpl progressImpl=新しい MyProgressImpl(進行);
worker.execute (progressImpl、param);
true を返します。
}
};
async.execute(0);
if(!isDone){
Looper.loop();//progressDialog をすぐに表示
}
}
});
main.start();
試す {
main.join();
キャッチ(InterruptedException e){
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
結果を返します。値;
}
すべてが機能しますが、ProgressDialog は閉じません。looper.quit() が悪いことをしているのではないかと思いますが、Looper.loop() を停止する必要があります。ProgressDialog をすぐに表示する必要があるため、 loop() を呼び出します。