2012-08-24 4 views
0
protected void showSpinner() { 
    dialogSpin = ProgressDialog.show(activity, "", 
      "Loading. Please wait...", true); 

    Thread t = new Thread(new Runnable(){ 

     @Override 
     public void run() { 
      activity.runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 


        EverydayNotesAndroid3Activity.importAllCalendar(); 
       } 
      }); 
     } 

    }); 
    t.start(); 
} 

스레드가 실행되는 동안 회 전자를 보여주고 싶습니다. 이렇게하면 가져 오는 동안 내 캘린더 가져 오기가 사용자에게 어떻게 진행되는지 알 수 있습니다.Android에서 진행 상황을 표시하는 동안 코드 실행

문제 : 내 Spinner 대화 상자는 가져 오기가 완료되었을 때만 표시됩니다. 나는 내 코드에 따라 대화 상자를 표시하고 가져 오기 (30 초 소요)를 실행해야하지만, 한 번 더 대화 상자에 가져 오기가 끝날 때까지 기다려야하므로 내가 잘못하고있는 것을 알지 못합니다.

관심을 가져 주셔서 감사합니다. 자세한 정보를 요청하십시오.

답변

1

캘린더를 가져 오는 데 AsyncTask을 사용합니다. AsyncTask에는 재정의 할 수있는 세 가지 메서드가 있습니다. doInBackground를 덮어 쓰고 백그라운드 스레드에서 수행되는 모든 작업을 수행합니다. UI에서 뭔가가 변경되어야 할 때마다 백그라운드 작업에서 publishProgress를 호출 할 수 있습니다. AsyncTask는 UI 스레드에서 onProgressUpdate을 호출하여 사용자에게 진행 상황을 표시 할 수있게합니다.

1

UI 스레드 자체에서 캘린더를 가져옵니다. 그런 다음 가져 오기가 완료 될 때까지 진행 대화 상자가 표시됩니다. 그런 다음 다시 표시됩니다.

진행률 대화 상자를 표시하려면 UI 스레드가 아닌 다른 스레드에서 캘린더를 가져옵니다.

+0

이해하기 쉽고 도움이됩니다. 시도하고 실제로 작동하지만이 importCalendar 함수에서 대화 상자의 텍스트를 변경해야합니다. 일반 스레드에서 UI를 수정할 수 없습니다 ... 어떻게해야합니까? –

+0

그런 다음 Asynctask를 사용하면이 유형의 작업 만 수행 할 수 있습니다. – sankar

관련 문제