2011-01-22 7 views
1

私のアプリは、Webサーバーからデータをロードしています。この時間は、アプリユーザーに黒い画面を表示させないために進捗ダイアログが必要です。ProgressDialog cant stop

Button ok = (Button) findViewById(R.id.ok); 
     ok.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View view) { 
       MyDialog = ProgressDialog.show(yassou.this, " " , " Loading. Please wait ... ", true); 
        MyDialog.show(); 
       // myIntent.username.getText(); 
        try { 

         Send(); 

       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
        Status(); 
        //MyDialog=null; 
       } 

      }); 

これはbtn魔法使いであり、 "onclick"はデータをロードしています。 Send();ユーザーが自分のサーバーに入力したデータを送信する方法です。Status();は私を新しいページに誘導する2番目の方法です。残念なことに、私がokボタンを押すと、アプリケーションは最初に2ページ目に行き、2番目に表示されます私は間違っていますか?

+0

を試してみてください。 Status()の後に。これにより、進行状況ダイアログは停止しますが、2番目のページが開始されると進行状況ダイアログが表示されます –

答えて

1

ダイアログが不要になったときにダイアログを閉じる必要があります。 UIへの変更が発生する前にすべてのonClick()コードが実行されるため、「2ページ目」に送信された後に表示されます。

それはあなたがそのコードが実行されている間UIがロックされますので、AsyncTaskまたは(最後に、ダイアログを閉じます、)スレッド内のすべてのSend()Status()仕事をして、勝ったことが重要ですダイアログを表示することはできません。さらに、ジョブが長すぎると、アプリケーションが応答しない(ANR)メッセージが表示される可能性があります。

UIスレッドで実行されるすべてのメソッドは、レスポンスを保証し、ユーザーに鈍感にならないように、200ミリ秒未満であることをお勧めします。

Creating Dialogs(アンドロイドデベロッパーより)

+0

AsyncTaskが推奨されます – bigstones

0

私はMyDialog.dismiss()を使用しようとしました。この

Button ok = (Button) findViewById(R.id.ok); 
    ok.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View view) { 
      MyDialog = ProgressDialog.show(yassou.this, " " , " Loading. Please wait ... ", true); 
       MyDialog.show(); 
      // myIntent.username.getText(); 
       try { 

        Send(); 

      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      MyDialog.dismiss(); 
       Status(); 
       //MyDialog=null; 
      } 

     });