Añadir un retraso de diálogo Progreso
-
25-09-2019 - |
Pregunta
Quiero hacer aparecer un diálogo de progreso simulado durante 2 o 3 segundos. No va a hacer otra cosa que en realidad detección decir nada. Tengo el código:
ProgressDialog dialog = ProgressDialog.show(this, "", "Detecting...",
true);
dialog.show();
dialog.dismiss();
Pero lo que puedo poner en el medio del espectáculo, y el despido de tener aparece el cuadro de diálogo durante unos segundos? Gracias!
Solución
La forma correcta - no bloquee el hilo principal, por lo que se mantiene la interfaz de usuario de respuesta:
dialog.show();
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
dialog.dismiss();
}
}, 3000); // 3000 milliseconds delay
Otros consejos
progress.setProgress(100);
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
pdialog.dismiss();
}}, 3000);
También puede utilizar CountDownTimer
de Android, que es mucho más eficiente que cualquier otra solución publicada y también apoyar a incendios en regulares intervalos a través de su método de onTick()
.
Tener un vistazo a este ejemplo,
new CountDownTimer(3000, 1000) {
public void onTick(long millisUntilFinished) {
// You don't need anything here
}
public void onFinish() {
dialog.dismiss();
}
}.start();
Puede hacer algo como esto:
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();
Nada se interpone entre despedir y mostrar .. el tiempo dependiendo de usted. Por ejemplo diálogo mostrará antes de que el acceso al servidor y se despedirá a conseguir medios de Resultados
dialog.show();
ServerCall();
dialog.close();
Si necesita medios de retardo vacías a continuación, utilizar la llamada countDownTimer entre eso ..
En el caso de que alguien en busca de Xamarin.Android
( usando C # ) solución ( Knego ), aquí es cómo:
new Handler().PostDelayed(() => {
dialog.dismiss();
}, 1000);