Objetivo:
Vamos a aprender a crear un ProgressDialog; es decir, un mensaje de espera (junto con una rueda giratoria en este caso) mientras se realizan acciones en segundo plano.
Esto es ideal cuando deseamos que el usuario espere para mostrar estos datos, y al tardar algo de tiempo, deseamos advertirles que esperen.
La aplicación programada en este caso son dos Actividades. La primera llamará a la segunda, la cual debe procesar unos datos antes de mostarlos, y por tanto implementará el ProgressDialog.
Vemos primero una captura de pantalla de la aplicación que vamos a programar:
Código fuente java (/src/Principal.java):
[sourcecode language=”java”]
package com.progressdialog;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
public class Principal extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.principal);
}
public void onClick_ExampleApp(View v){
startActivity(new Intent(this, Ejemplo_con_rueda.class));
}
}
[/sourcecode]
Código fuente java (/src/Ejemplo_con_rueda.java):
[sourcecode language=”java”]
package com.progressdialog;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
public class Ejemplo_con_rueda extends Activity {
//variables necesarias
private ProgressDialog pd = null;
private Object data = null;
private TextView texto;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ejemplo_con_rueda);
//asignamos el TextView para mostrar luego los datos procesados
this.texto = (TextView) findViewById(R.id.texto);
// Mostrar el ProgressDialog en este Thread
this.pd = ProgressDialog.show(this, "Procesando", "Espere unos segundos…", true, false);
// Se comienza la nueva Thread que descargará los datos necesarios
new DownloadTask().execute("Parametros que necesite el DownloadTask");
}
/**
* Muestra el texto resultado
* @param String textoAMostrar
*/
public void mostrarResultado(String textoAMostrar){
this.texto.setText(textoAMostrar);
}
/**
* Subclase privada que crea un hilo aparte para realizar
* las acciones que deseemos.
*/
private class DownloadTask extends AsyncTask {
protected String doInBackground(String… args) {
Log.i("Mi app", "Empezando hilo en segundo plano");
// Aqui se realizan las operaciones necesarias
// Como ejemplo, simulamos que se trabaja durante unos segundos con un for
for (int i=1;i }
return "Datos ya procesados (resultado)";
}
protected void onPostExecute(Object result) {
// Pasamos el resultado de los datos a la Acitvity principal
Ejemplo_con_rueda.this.mostrarResultado((String)result);
if (Ejemplo_con_rueda.this.pd != null) {
Ejemplo_con_rueda.this.pd.dismiss();
}
}
}
}
[/sourcecode]
Código fuente XML (/res/layout/principal.xml):
[sourcecode language=”xml”]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:layout_width="fill_parent"
android:layout_height="wrap_content" android:text="@string/hello" />
<Button android:id="@+id/button_ExampleApp" android:onClick="onClick_ExampleApp"
android:layout_gravity="center" android:layout_width="200dip"
android:layout_height="wrap_content" android:text="actividad 2" />
</LinearLayout>
[/sourcecode]
Código fuente XML (/res/layout/ejemplo_con_rueda.xml):
[sourcecode language=”xml”]
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Datos no procesados aun"
android:id="@+id/texto" />
</LinearLayout>
[/sourcecode]
Descárgate el código aquí
Gracias por los tutoriales.
Se agradece mucho que a parte de código, esté bin explicado :D
(No era el que buscaba, pero me ha ayudado a entender algunas cosillas :))
Hola amigos bueno quisiera agradecerles sobre los tutos que hacen que son de mucha ayuda para los que empezamos a programar en android.
Tengo una consulta estaba observando sobre el Articulo de la Clase AsyncTask y tengo una duda sobre ese tema. Mi duda es la siguiente ahi tu le das un valor maximo de 1400000 al progressDialog y que valla aumentando de uno en uno el progressDialog hasta que llegue a 100 pero mi duda es la siguiente yo tengo un login en Android con Conexion a Pagina web y cuando lleno mi formulario del login y doy click en aceptar, empieza a ejecutar el codigo pero al dar click en el boton se pone como la pantalla como un poco lento osea creo que tiene un tiempo que se demora en comunicarse con la pagina web y hacer la consulta con la BD de la pagina web y verificar si existe el usuario o no. Mi duda es la siguiente como yo calculo el tiempo que se demora en hacer la consulta a la pagina web con Conexion a Base de Datos, para asi yo poner un progressDialog y ya no darle 1400000 sino el tiempo que he calculado en consultar a la Pagina web con Base de Datos. Gracias de antemano espero su pronta respuesta. Saludos desde PERU.
Puedes usar un progressDialog indeterminado cuando el termine en el doInBackground el desaparecera el dialog.
Debes declararlo en el doInBackGround() de tu AsynTask. Una vez que haya terminado, el dialogo desaparece y vuelves al main thread. Saludos