Добавьте задержку для прогресса диалогового окна

StackOverflow https://stackoverflow.com/questions/4209270

  •  25-09-2019
  •  | 
  •  

Вопрос

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

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

    dialog.dismiss();

Но что я могу положить между шоу, и увольнение иметь диалог на несколько секунд? Спасибо!

Это было полезно?

Решение

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

dialog.show();

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

Другие советы

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

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

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

 new CountDownTimer(3000, 1000) {

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

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

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

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();

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

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

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

В случае, если кто-то ищет Xamarin.Android (Использование C #) решение (из Ответ Питера Кнего), вот как:

new Handler().PostDelayed(() => { 
    dialog.dismiss();
}, 1000);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top