0

多くの人が同様の問題を抱えていることがわかりましたが、URL からデータを取得しているときにダイアログを表示し、データが取得された後に適切に閉じようとしているだけです。これが私がやろうとしていることです(これは更新ボタンの onClick() メソッドにあります):

dialog.show();  
// do some work  
dialog.dismiss();

このようにすると、ダイアログがまったく表示されなくなります。次のような追加のスレッドを使用して試してみました。

Thread t = new Thread() {
    public void run() {
        dialog.show();
    }
};

しかし、この方法ではエラーが発生し、強制的に閉じられます...
これを行うための最良の方法は何ですか?

4

3 に答える 3

0

実装しようとしているタスクの場合:

dialog.show();  
// do some work  
dialog.dismiss();

さて、上記を実装するために、Androidでは無痛スレッドとしても知られているスレッドタスクを実装するための最良の方法であるAsyncTaskの概念があります。

AsyncTaskには4つの主要なメソッドがあります。

  1. onPreExecute()-ここでは、ProgressDialogまたはProgressBarを表示できます。
  2. doInBackground()-ここでは、バックグラウンドタスクを実行/実装できます
  3. onProgressUpdate()-ここでは、Webサービス呼び出しまたはバックグラウンドタスクから受け取った中間結果に基づいてUIを更新できます
  4. onPostExecute()-ここで、ダイアログを閉じるか、進行状況バーを非表示にすることができます。また、バックグラウンドタスクまたはWebサービス呼び出しから結果を受け取った後に実行したいタスクを実行できます。
于 2012-10-17T05:41:09.360 に答える
0

スレッドを使用する代わりに、アクティビティのrunOnUiThreadを使用してみてください。次のコードスニペットを確認してください。runOnUiThread(new Runnable(){

            public void run() {

                    dialog = new ProgressDialog(ctContext);

                    dialog.show();
                }
            }

        });

これはあなたを助けると思います。

于 2012-10-17T05:41:34.523 に答える
0

この種のタスクでは、ほとんどの場合、AsyncTask を使用することをお勧めします。これがあなたを助ける良い例です

この質問については、UI 関連のタスクを作成しているため、UI スレッドを使用してください。

runOnUiThread(new Runnable() {

    @Override
    public void run() {
    // TODO Auto-generated method stub
    //Show or Hide your ProgressDialog
    }
});
于 2012-10-17T05:39:09.580 に答える