2016-06-14 3 views
0

진행률 대화 상자를 표시하고 runOnUiThread 안에 업데이트하려고하지만 진행률 막대가 표시되지 않습니다. runOnUiThread를 "new Thread"로 대체하면 정상적으로 작동합니다. 그러나 나는 그것을 시도 runOnUiThread 작업runOnUiThread의 ProgressDialog

여기

내 코드, 내가 삭제 한 불필요한 코드

public class test extends Activity { 

private ProgressDialog progress; 
Handler progressBarHandler = new Handler(); 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
testing(); 
} 

public void testing() { 
    progress=new ProgressDialog(this); 
    progress.setMessage("Saving Progress"); 
    progress.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
    progress.setProgress(0); 
    progress.setMax(100); 
    progress.setCancelable(false); 
    progress.show(); 
    runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
     //do some work 
     for (int i =0; i<100;i++){ 

     //some work 


      progressBarHandler.post(new Runnable() { 

         @Override 
         public void run() { 
          progress.setProgress(finalCount); 
         } 
      }); 
     } 
} 
} 
+0

그것은 결코 작동하지 않을 것입니다 ... UI 구현의 기초 : 당신이 루프로 UI 스레드를 차단한다면 UI 스레드를 해제 할 때까지 다른 UI 호출 (진행률 설정과 같은)이 호출되지 않습니다. 이는 메시지 대기열 – Selvin

답변

0

할이

public class MainActivity extends AppCompatActivity { 

private ProgressDialog progress; 
Handler workHandler; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    progress=new ProgressDialog(this); 
    progress.setMessage("Saving Progress"); 
    progress.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
    progress.setProgress(0); 
    progress.setMax(100); 
    progress.setCancelable(false); 
    progress.show(); 

    workHandler = new Handler(new HandlerThread("workHandlerThread").getLooper()); 

    workHandler.post(new Runnable() { 
     @Override 
     public void run() { 

      //Do some work 


      runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        progress.setProgress(/*work result*/); 
       } 
      }); 
     } 
    }); 
} 
} 

당신이 바인딩 HandlerThread에서 일을한다 생각 workHandler 그리고 결과를 UI를 사용하여 게시하십시오 runOnUiThread()