2011-01-22 1 views
1

내 앱이 웹 서버의 일부 데이터를로드하고 있습니다. 이번에는 앱 사용자에게 검은 색 화면이 표시되지 않도록 진행 대화 상자를 만들고 싶습니다.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; 
       } 

      }); 

이것은 'onclick'이 데이터를로드하는 btn 마녀입니다. Send(); 사용자가 내 서버에 입력 한 일부 데이터를 보내는 방법이며 Status();은 나를 새 페이지로 안내하는 두 번째 방법입니다. 불행히도 ok 버튼을 누르면 앱이 두 번째 페이지로 이동하고 두 번째 페이지가 나타납니다. 논스톱 진행 대화 상자. 제발 제 잘못 됐나요?

+0

내가 MyDialog.dismiss()를 사용하는 것을 시도했다 시도; Status(); 이것은 진행 대화 상자를 중지하지만 두 번째 페이지가 시작될 때 진행 대화 상자가 나타납니다 –

답변

1

대화 상자가 필요하지 않을 때 대화 상자를 닫아야합니다. UI 변경 사항이 발생하기 전에 모든 onClick() 코드가 실행되기 때문에 "두 번째 페이지"로 전송 된 후에 나타납니다.

그것은 당신이 그 코드가 실행되는 동안 UI가 고정되기 때문에, AsyncTask 또는 (마지막에 대화 상자를 닫습니다 것) 스레드의 모든 Send()Status() 일을하고, 원하는 것이 중요합니다 대화 상자를 표시 할 수 없습니다. 또한 작업이 너무 길면 ANR (Application Not Responding) 메시지가 표시 될 수 있습니다.

UI 스레드에서 실행되는 모든 메소드는 응답 성을 보장하고 사용자에게 느려지지 않도록 200ms 미만으로 지속되어야합니다.

Creating Dialogs

+0

AsyncTask가 권장되는 방법입니다 – bigstones

0

(안드로이드 어플)이

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; 
      } 

     });