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í