2010-11-17 2 views
10

Я хочу, чтобы диалог создания фиктивного файла отображался в течение 2 или 3 секунд. На самом деле это не будет делать ничего, кроме обнаружения. У меня есть код:Добавить задержку в диалоговом окне «Прогресс»

ProgressDialog dialog = ProgressDialog.show(this, "", "Detecting...", 
      true); 
    dialog.show(); 

    dialog.dismiss(); 

Но что я помещал между шоу и увольнением иметь диалог появится в течение нескольких секунд? Благодаря!

ответ

48

Правильный путь - это не блокирует ваш главный нить, поэтому пользовательский интерфейс остается отзывчивым:

dialog.show(); 

Handler handler = new Handler(); 
handler.postDelayed(new Runnable() { 
    public void run() { 
     dialog.dismiss(); 
    } 
}, 3000); // 3000 milliseconds delay 
+0

Великий ответ, просто вам не хватает дополнительного фигурную скобку перед последней строкой: }} , 3000); // 3000 miliseconds – DEzra

+0

извините! как мы можем обновить наше сообщение о диалоге прогресса во время ожидания. например: 5 sec ... 4 sec ... 3 sec ... 2 sec ... 1 sec ... BOOOOM! и увольте –

0

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

dialog.show(); 
ServerCall(); 
dialog.close(); 

Если вам нужна пустая задержка означает то использовать CountDownTimer вызов между этим ..

2
 progress.setProgress(100); 
     Handler handler = new Handler(); 
     handler.postDelayed(new Runnable() { 
      public void run() { 
       pdialog.dismiss(); 
      }}, 3000); 
1

Вы также можете использовать CountDownTimer Андроида, который является гораздо более эффективным, чем любое другое решение, и я отвечал t также поддерживает пожары на регулярной основе через его onTick() способ.

Посмотрите на этот пример,

new CountDownTimer(3000, 1000) { 

    public void onTick(long millisUntilFinished) { 
      // You don't need anything here 
    } 

    public void onFinish() { 
     dialog.dismiss(); 
    } 
    }.start(); 
+0

Это именно то, что мне нужно, функция Hanlder funtion не может использоваться в Leanback: D –

1

Вы можете сделать что-то вроде этого:

new AsyncTask<Void, Void, Void> 
{ 
    ProgressDialog dialog = new ProgressDialog(MainActivity.this); 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 

     dialog.setTitle("Please wait"); 
     dialog.setMessage("Preparing resources..."); 
     dialog.setCancelable(false); 
     dialog.show(); 
    } 


    @Override 
    protected Void doInBackground(Void... params) { 
     try{ 
      Thread.sleep(3000); 
     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    protected void onPostExecute(Void aVoid) 
    { 
     super.onPostExecute(aVoid); 
     if (dialog!=null && dialog.isShowing()) 
     { 
      dialog.dismiss(); 
     } 
    } 
}.execute(); 
Смежные вопросы