2011-06-24 19 views
0

いくつかの情報を送信するときに使用する進捗ダイアログボックスをアプリケーションで作成します。しかし、私が書いたコードはうまくいかないでしょう。この方法センド()が実行しますが、それはここでは非常に迅速に進捗状況ダイアログボックスが表示されません - Android

を閉じるためのダイアログボックスが表示されません私のコードです:

ProgressDialog myProgressDialog = ProgressDialog.show(Tents.this, 
           "Please wait...", "Sending...", true); 
    send(); 
    myProgressDialog.dismiss(); 
    goFour(); 

私は少し長くダイアログボックス最終を作るにはどうすればよいですか?

+2

あなたはそれをただちに表示するだけではなく、却下行をコメントアウトするとどうなりますか? – shaunhusain

+0

まあ、それは恥ずかしいです。あなたが正しいです。だから私の本当の疑問は、どうやってそれを少し長くしていくのだろうかと思うだろうか? – Zaask

+0

はいzaaskさんがshaunさんが提案していますdismiss()の後にチェックしてみてください – Deva

答えて

2

まず、送信中にUIスレッドを効果的にブロックしているので、show()とdismiss()と同じスレッドでsend()を実行しないでください。ダイアログは実際には表示されません。なぜなら、show()が呼び出された後に表示するために、UIスレッドのメインルーパーにコントロールを戻し、処理しているイベントを処理するだけです。そうしないと、UIスレッドはダイアログを描画する機会を得ることはありません。

AsyncTaskでsend()を実行し、onPostExecute()でdismiss()を呼び出すことをお勧めします(http://developer.android.com/reference/android/os/AsyncTask.htmlを参照して、非同期タスクを実行する方法を理解してください)。

2

おそらく進行状況ダイアログが表示されていますが、待つことはないためすぐに却下します。

私は例えばOnCreate関数では、あなたがこれをしたいふり:

@Override 
public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    ProgressDialog pd = ProgressDialog.show(this, "Please wait...", "Sending..."); 
    new Thread(new Runnable(){ 
     public void run() { 
      send(); 
      pd.dismiss(); 
     } 
    }).start(); 

    gofour(); 
    } 

EDIT:それはまだすぐに消える場合は、send();が実際にいくつかの時間がかかる何かをすることを確認してください。 ;)

0

UIスレッドはsend()を開始するために使用されますが、これは動作せず、進行状況ダイアログは表示されません。 別のスレッドまたはAsynTask doBackgroundで呼び出しを送信し、完了したらダイアログを閉じます。

+0

send()関数がonCreate()メソッドのタイムアウト(私はその5秒を取得すると思う!)が発生しない限り動作しますが、その良い練習ではありません! – Kenny

0

ダイアログが正しく表示されないように送信アクションが完了している場合、代わりにrequestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS)を介してアクティビティの右上に不確定なプログレスバーを使用し、次にsetProgressBarIndeterminateVisibility(true/false)を使用することをおすすめします。

0

「私の本当の疑問は、どうやってそれを少し長くするのですか?私の答えはなぜだろうか???

私はあなたの送信機能が完了したことを確認するための警告ダイアログを表示する方がいいと思うが、理由がないのを待たなければならないのは迷惑でしょう。

関連する問題