2016-06-14 5 views
0

Я пытаюсь показать диалог выполнения и обновить его внутри runOnUiThread , но индикатор выполнения никогда не показывался. когда я заменяю runOnUiThread на «новый поток», он отлично работает. Но я хочу, чтобы работать с runOnUiThreadProgressDialog в runOnUiThread

вот мой код, я удалил ненужные коды

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

Это никогда не сработает ... Основы реализации пользовательского интерфейса: если вы блокируете поток пользовательского интерфейса с помощью цикла другие вызовы пользовательского интерфейса (например, процесс настройки) не будут вызываться до тех пор, пока вы не отпустите поток пользовательского интерфейса - поскольку очередь сообщений – 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, и опубликуйте результаты обратно в пользовательский интерфейс, используя runOnUiThread()