Добавьте задержку для прогресса диалогового окна
-
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);