Mostrar ProgressBar durante cierto tiempo en Android
Tengo que esperar unos segundos en mi aplicación de Android y quiero mostrar una barra de progreso durante este tiempo, ¿cómo puedo hacer esto?
He intentado por ejemplo este código:
- Descargar imágenes con AsyncTask
- Cómo conseguir la barra de progreso indeterminada más suave usada en la aplicación Android de Gmail
- Mostrando la barra de progreso y cargando la imagen en splash en android
- Cómo crear una barra de progreso horizontal personalizada
- ProgressBar en ActionBar, como la última actualización de la aplicación de GMail
public boolean WaitTask() { pDialog = ProgressDialog.show(context,null, "Lädt..",true); new Thread() { public void run() { try{ // just doing some long operation sleep(2000); } catch (Exception e) { } pDialog.dismiss(); } }.start(); return true; }
Pero la barra de progreso se cierra inmediatamente sin esperar los dos segundos. ¿Dónde está mi problema?
La barra de progreso debe parecerse al círculo de actividades que se muestra en este sitio desde Android Developers.
ACTUALIZAR El AsyncTask
private class WaitTime extends AsyncTask<Void, Void, Void> { @Override protected void onPreExecute() { super.onPreExecute(); mDialog.show(); } protected void onPostExecute() { mDialog.dismiss(); } @Override protected void onCancelled() { mDialog.dismiss(); super.onCancelled(); } @Override protected Void doInBackground(Void... params) { long delayInMillis = 2000; Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { mDialog.dismiss(); } }, delayInMillis); return null; } }
Lo llamo así:
mDialog = new ProgressDialog(CreateProject.this); mDialog = ProgressDialog.show(context,null, "Lädt..",true); WaitTime wait = new WaitTime(); wait.execute();
- ¿Cómo cambiar el color en la barra de progreso circular?
- ¿Cómo usar setProgressDrawable () correctamente?
- ProgressBar en la parte inferior de gridview
- ¿Cómo dar una barra de progreso para la descarga?
- AsyncTask, Fragmentos, Vistas y Backstacks
- ¿Cuál es la diferencia entre Progressbar y ProgressDialog?
- Cómo dejar de cambiar la orientación cuando una barra de progreso está girando en android
- android circle progressbar
Te recomiendo que uses AsyncTask, entonces puedes hacer algo como esto:
AsyncTask<Void, Void, Void> updateTask = new AsyncTask<Void, Void, Void>(){ ProgressDialog dialog = new ProgressDialog(MyActivity.this); @Override protected void onPreExecute() { // what to do before background task dialog.setTitle("Loading..."); dialog.setMessage("Please wait."); dialog.setIndeterminate(true); dialog.setCancelable(false); dialog.show(); } @Override protected Void doInBackground(Void... params) { // do your background operation here return null; } @Override protected void onPostExecute(Void result) { // what to do when background task is completed dialog.dismiss(); }; @Override protected void onCancelled() { dialog.dismiss(); super.onCancelled(); } }; updateTask.execute((Void[])null);
Y si quieres esperar algún tiempo específico, tal vez te gustaría usar Timer:
final ProgressDialog dialog = new ProgressDialog(MyActivity.this); dialog.setTitle("Loading..."); dialog.setMessage("Please wait."); dialog.setIndeterminate(true); dialog.setCancelable(false); dialog.show(); long delayInMillis = 5000; Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { dialog.dismiss(); } }, delayInMillis);
Error: llamando pDialog.dismiss();
Debe hacerse desde el hilo de interfaz de usuario en lugar de llamados desde su nuevo hilo.
Por lo que su código debe cambiar a:
pDialog = ProgressDialog.show(context,null, "Lädt..",true); new Thread() { public void run() { try{ // just doing some long operation Thread.sleep(2000); } catch (Exception e) { } // handle the exception somehow, or do nothing } // run code on the UI thread mYourActivityContext.runOnUiThread(new Runnable() { @Override public void run() { pDialog.dismiss(); } }); }.start();
En general – hay mucho mejores enfoques realizar tareas de fondo (esperar y no hacer nada durante dos segundos es también la tarea de fondo) y realizar algo en el hilo principal de la interfaz de usuario cuando terminaron. Puede utilizar la clase AsyncTask
por ejemplo. Es mejor utilizar este android construido en el mecanismo, y no la creación de hilos "primitivo", aunque también funcionará – sólo si se maneja bien su aplicación y el ciclo de vida de la actividad. Recuerde que hay una posibilidad de que en los dos segundos que está esperando – el usuario puede navegar lejos de su aplicación. En ese caso, el dismiss();
Método sería llamar a un contexto destruido …
Le sugiero que lea más en – http://developer.android.com/reference/android/os/AsyncTask.html
- Cómo capturar una imagen en segundo plano sin utilizar la aplicación de cámara
- ¿Impedir que las funciones sean eliminadas de una biblioteca estática cuando están enlazadas en una biblioteca compartida?