Añadir ProgressDialog en un ListActivity de Android - Más allá de lo que ves

miércoles, 17 de agosto de 2011

Añadir ProgressDialog en un ListActivity de Android

Tal como me solicitaba oconnell_2k4 recientemente voy a dejar un ejemplo de como poner utilizar en un ListActivity de Android un ProgressDialog mientras se obtienen los datos para cargarlos en el ListView, se pueden obtener desde una base de datos local o desde una fuente externa usando por ejemplo una petición HTTP que retorne objetos JSON.

El código de ejemplo que usaba en la entrada Reinicio de Actividades en Android al cambiar orientación llamaba a un método de la clase llamado loadMyData(), pues bien este método se completaría con el siguiente código.
protected ProgressDialog cargarClientesProgressDialog = null;


protected void loadMyData(){
cargarClientesProgressDialog = ProgressDialog.show(ClientesListView.this,
"", getResources().getString(R.string.cliente_listview_loading), true, false);

// usar un hilo diferente para obtener los clientes
Thread thread = new Thread(null, cargarClientesEnBackgroundProcess,
"CargarClientesThread");

// Iniciar el hilo que carga los clientes
thread.start();
}

protected Runnable cargarClientesEnBackgroundProcess = new Runnable() {
public void run(){getClientes();}
};

protected String QUERY = null;

protected void getClientes() {
if(this.QUERY != null && this.QUERY.length() > 0){
clientesList = clientesDbAdapter.filtrarClientes(this.QUERY);
} else {
clientesList = clientesDbAdapter.getListClientes();
}
handler.post(updateClientesListView);
}


protected Runnable updateClientesListView = new Runnable() {
@Override
public void run() {loadClientes();}
};

protected void loadClientes(){
this.clienteAdapter = new ClienteAdapter(this, R.layout.list_item_cliente,
new ArrayList());
setListAdapter(this.clienteAdapter);

if (clientesList != null && clientesList.size() > 0) {
clienteAdapter.notifyDataSetChanged();
for (int i = 0; i <>
clienteAdapter.add(clientesList.get(i));
}

if(cargarClientesProgressDialog != null) {
cargarClientesProgressDialog.dismiss();
}
clienteAdapter.notifyDataSetChanged();
}


Espero que pueda ser útil y siento la demora pero he estado algo liado.

1 comentario:

  1. Sorry el SintaxHighlighter me esta haciendo algo extraño en el post, cuando tenga algo más de tiempo lo miro.

    ResponderEliminar