2017-02-08 11 views
-3

Я новичок в разработке Android. Я пытаюсь показать ProgressDialog. Я вижу много учебников, которые говорят, что для отображения диалога должен использоваться поток. Как вы можете видеть, код фрагмента использует поток.ProgressDialog не работает даже с помощью потока

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     try { 
      refreshFromFeed(); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
     setContentView(R.layout.activity_main); 
    } 

private void refreshFromFeed() throws InterruptedException { 
     ProgressDialog dialog = ProgressDialog.show(this,"Loading","Wake up after some sleep"); 
     Thread th = new Thread(){ 
      public void run(){ 
       Log.d("TimeFrom", String.valueOf(System.currentTimeMillis()/1000)); 
       try { 
        Thread.sleep(5000); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 

       Log.d("TimeTo", String.valueOf(System.currentTimeMillis()/1000)); 
      } 
     }; 
     th.start(); 
     dialog.dismiss(); 
    } 
protected void onRefresh(View view) throws InterruptedException { 
     refreshFromFeed(); 
    } 

Журнал показывает, потребовалось 5 секунды, однако, я не могу увидеть любой диалог на моем экране, и я могу сделать что-нибудь на экране. Даже я использую на физическом устройстве. Я использовал режим отладки. Не исключение.

onRefresh это событие по onClick, что заявленный на его XML.

ответ

0

Я немного изменил ваш код, внимательно прочитайте его.

private void refreshFromFeed() throws InterruptedException { 
    ProgressDialog dialog = ProgressDialog.show(this,"Loading","Wake up after some sleep"); 
    Thread th = new Thread(){ 
     public void run(){ 
      Log.d("TimeFrom", String.valueOf(System.currentTimeMillis()/1000)); 
      try { 
       Thread.sleep(5000); 
       dialog.dismiss(); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 

      Log.d("TimeTo",String.valueOf(System.currentTimeMillis()/1000)); 
     } 
    }; 
    th.start(); 

} 
+0

Ваши права. Я должен изменить метод reject(). однако он не работает снова :( –

+1

add dialog.show() после Threat th –

+0

Спасибо, он работает очень хорошо –

0

Вы отклонили свой диалог сразу после его показа. Возможно, вы хотите переместить свой «dialog.dismiss();» внутри резьбы. Помните, что вам нужно, чтобы закрыть диалоговое окно на UI тему, в противном случае это приведет к сбою приложения:

private void refreshFromFeed() throws InterruptedException { 
     final ProgressDialog dialog = ProgressDialog.show(this,"Loading","Wake up after some sleep"); 
     Thread th = new Thread(){ 
      public void run(){ 
       Log.d("TimeFrom", String.valueOf(System.currentTimeMillis()/1000)); 
       try { 
        Thread.sleep(5000); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 

       Log.d("TimeTo", String.valueOf(System.currentTimeMillis()/1000)); 

       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         dialog.dismiss(); 
        } 
       }); 
      } 
     }; 
     th.start(); 
    } 

Я вижу много учебника, которые говорят, для показа диалога необходимо использовать нить.

Вы явно не нужна нить, чтобы показать ProgressDialog, это просто пример, чтобы закрыть его после 5000 мс

0
private void refreshFromFeed() throws InterruptedException { 
     final ProgressDialog dialog = ProgressDialog.show(getActivity(),"Loading","Wake up after some sleep"); 
     Thread th = new Thread() { 
      public void run() { 
       Log.d("TimeFrom", String.valueOf(System.currentTimeMillis()/1000)); 
       try { 
        Thread.sleep(5000); 
        dialog.dismiss(); // dismiss your dialog here 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 

       Log.d("TimeTo", String.valueOf(System.currentTimeMillis()/1000)); 
      } 
     }; 
     th.start(); 
    } 
+0

Это не сработало :( –

0

Вы все еще запустить ProgressDialog в вашем UI потоке.

ProgressDialog dialog = ProgressDialog.show(this,"Loading","Wake up after some sleep"); 

Новая тема, созданная после этой строки, а не перед этой строкой!

 Смежные вопросы

  • Нет связанных вопросов^_^