2011-05-11 2 views
3

진행률 대화 상자가 언제 Android에 표시되지 않습니까? 진행 대화 상자가이 경우에 표시되지 않은 내 경우에는진행률 대화 상자가 안드로이드에 표시되지 않습니까?

: 나는 위가 일어날 수있는 상황을 알고 싶어

func{ 
    progressdialog.show(); 
    .... 
    ..... 
    anotherfunction(); 
    listview.setAdapter(); 
    progressdialog.dismiss(); 
    } 

대화 상자와 엄지 손가락의 일반적인 규칙은 무엇인가?

미리 감사드립니다.

편집 .show() 명령을 실행하면 진행 대화 상자가 표시됩니다. 그러나 otherfucntion()이 호출 될 때, progressdialog의 이전 명령은 멈추는가?

+0

해당 코드를 실행 한 스레드는 무엇입니까? 로그에 오류 메시지가 나타 났습니까? 진행 대화 상자는 어떻게 만들어 졌습니까? – Kaj

+0

메인 UI 스레드에서 실행 중입니다. 오류 메시지가 나타나지 않았습니다. 진행률 대화 상자가 나타나지 않았습니다. 실행 된 후 명령문이 표시되고 진행 대화 상자가 표시되지 않고 성공적으로 완료되었습니다. – user590849

답변

3

AsyncTask과 같이 보이지만 UI 스레드 (progressDialog 포함)는 UI 스레드가 여전히 바쁠 경우 업데이트되지 않습니다. 이를 위해 많은 예제가 있습니다.

그리고 어림짐작 - 진행률 대화 상자가 필요하면 - AsyncTask이 필요합니다.

명령이 멈추지 않습니다. UI 스레드에서 일련의 메서드를 실행하면 시퀀스가 ​​끝날 때까지 UI가 업데이트되지 않습니다 (progressDialog.dismiss() 이후). 따라서 progressDialog는 더 이상 표시되지 않습니다.

+0

하지만 listview를 채우는 것처럼 UI를 업데이트하는 중이라면? – user590849

+0

UI 스레드의 마지막 부분 만 백그라운드에서 수행 할 수 있습니다 (예 : DB/web/contacts/등에서 데이터 가져 오기와 같은 작업). AsyncTask 문서 (제 대답의 링크 참조)를 읽으십시오. 도움이 될 것입니다. – MByD

+0

그리고 언제 ui 스레드가 * 너무 * 사용 중입니까? 이것은 UI 스레드에서 fuctions의 양이 적 으면 UI 스레드에서 진행 대화 상자를 사용할 수 있다는 것을 의미합니까? 실제로 무슨 일이 일어나고있는거야? – user590849

1

귀하의 활동에서이 작업을 수행해야한다고 생각합니다.

ProgressDialog _progressDialog = ProgressDialog.show(this,"Saving Data","Please wait......"); 
settintAdater(); 

private void settingAdater(){ 

     Thread _thread = new Thread(){ 

      public void run() { 

       Message _msg = new Message(); 
       _msg.what = 1; 
       // Do your task where you want to rerieve data to set in adapet 
       YourCalss.this._handle.sendMessage(_msg); 
      }; 
     }; 
     _thread.start(); 
    } 
Handler _handle = new Handler(){ 

     public void handleMessage(Message msg) { 

      switch(msg.what){ 

       case 1: 
        _progressDialog.dismiss(); 
        listview.setAdapter(); 
      } 
     } 
} 
+0

올바른지, 이전에이 작업을 수행했습니다. 하지만 난 언제 이것을 해야할지 알고 싶었어요? - UI 스레드에 많은 함수가 있거나 함수가 적을 때도 있습니까? – user590849

+0

백그라운드 작업을위한 스레드와 작업의 모든 백그라운드 작업을 처리하기위한 핸들러를 생성하기 만하면 Handler를 사용할 수 있습니다. AsynTask에서는 각 작업에 대해 별도의 클래스를 만들어야 만하므로 편리하지 않습니다. – Sujit

0

당신은을 보여주기 위해 호출 할 수 있습니다에 ..해서 ProgressDialog가

ProgressDialog progressDialog = ProgressDialog.show(PrintMain.this, "", 
        "Uploading Document. Please wait...", true); 

을 사용하여 표시하려면 그리고 당신은해서 ProgressDialog를 기각 귀하의 작업 사용

progressDialog.dismiss(); 

를 완료 한 경우 귀하의 onPreExecute 방법에서 AsyncTask 클래스의 ProgressDialog 및 완료 onPostExecute 방법으로 닫으십시오.

관련 문제