2012-02-17 9 views
0

ボタンをクリックすると、関数内でasyncクラスを呼び出しているので、displayList関数が実行されるまでprogressDialogを表示する必要があります。しかし、関数が実行を終了してすぐに終了した後にのみ表示されます。ここで間違っていることを教えてください。関数が終了するまで(AsyncTask)

public class FilterAsyncTask extends AsyncTask<Void, Void, Void> { 

    ProgressDialog dispProgress; 

    @Override 
     protected void onPreExecute() 
     { 
      dispProgress = ProgressDialog.show(Filter.this, "Please wait...", 
        "Loading...", true, true); 
     } 

     protected Void doInBackground(Void... params) { 

      return null; 
     } 

     protected void onPostExecute(Void result) { 
      super.onPostExecute(result); 

     MerchantsActivity.displayList(); 
      dispProgress.cancel(); 
      finish(); 
     } 

    } 
+0

これはサブクラスの権利として使用していますか? –

+0

はい私はこれをサブクラスとして使用しています – user1178492

答えて

0

私はstatic ProgressDialog#showメソッドを使用しないように、あなたをお勧めします。むしろnew ProgressDialog()を実行し、それに応じて初期化し、最後にshow()を呼び出します。私は静的メソッドを使用したことは一度もありませんし、それがどのように動作するのかわかりませんが、他のオプションを使用しました。さらに、静的メソッドには利用可能なドキュメントがないようです。

+0

私はそれを試みましたが運はありません。 – user1178492

1

doInBackground()でまったく何もしないので、AsyncTaskがすぐに完了します!それはあなたの長期的な背景以外のUIコードが行くと思われる場所です...

+0

MerchantsActivity.displaylist()は、読み込みに時間がかかる関数です。その関数をdoInBackground()に配置すると、実行時例外がスローされます – user1178492

+0

おそらくUIスレッドでのみ実行できるUIの処理が行われるためです。 MerchantsActivity.displayList()をバックグラウンドで(つまりdoInBackgroundで)実行できる部分と、UI(onProgressUpdateおよび/またはonPostExecuteで実行される)を単に更新する部分に再設計する必要があります –

+0

ありがとうございました。それは解決策のようです。私がこれを扱うことができる他の方法はありますか?それを部分に分割するには、多くのコード変更が必要です。 – user1178492

関連する問題