2012-01-16 16 views
8

lo tanto, si creo una AlertDialog así:Android - ¿Actualizar datos en un AlertDialog?

AlertDialog.Builder b = new AlertDialog.Builder(); 
b.setItems(MyStringArray, MyListener); 
b.create().show(); 

Y luego quiero actualizar los elementos de la lista, es decir MyStringArray ha cambiado a tener más o menos elementos. Parece que no puedo encontrar una manera de hacer esto. Hasta ahora, he intentado obtener el ListView del AlertDialog, pero parece que no puedo hacer que el .setAdapter funcione. ¿Es este el enfoque correcto, o hay una mejor manera de hacerlo?

Respuesta

9

No he probado esto por mi cuenta, pero de todas las demás aplicaciones que he creado estoy bastante seguro de que esto resolverá su problema.

En lugar de utilizar setItems, intente utilizar el método setAdapter() y pasar en un ArrayAdapter que se ha inicializado con los datos de su Array de String. Luego, cuando sepa que los datos han cambiado, puede usar getListView() para obtener su objeto de visualización y desde allí llamar al getAdapter() para que ahora esté trabajando directamente con el conjunto de datos. Puede borrarlo y volver a inicializarlo si lo desea, o simplemente agregar/eliminar los elementos que desee. Desde el objeto adaptador, si llama al notifyDataSetChanged(), debe desencadenar un nuevo trazado utilizando el nuevo conjunto de datos que acaba de suministrar al adaptador.

Espero que te ayude. Avísame si no es así.

DSC

+0

Todavía soy un poco novato cuando se trabaja con estos cuadros de diálogo. ¿Debo mantener DialogInterface.OnClickListener como OnClickListener, o usar View.OnClickListener como podría hacerlo con una lista de vista normal? – Paul

+0

Un poco estúpido de mi parte preguntar eso cuando podría intentarlo. Parece que DialogInterface.OnClickListener es el camino a seguir. – Paul

1

Si usted es como yo y que le gustaría utilizar el adaptador predeterminado, por ejemplo, para los artículos de múltiple opción, entonces no es también una manera.

Al igual que con cualquier otro adaptador, simplemente actualice el objeto de la matriz de cadenas, obtenga el adaptador de la instancia de diálogo, transfiéralo al adaptador apropiado e invalídelo.

AlertDialog.Builder b = new AlertDialog.Builder(); 
b.setItems(MyStringArray, MyListener); 
AlertDialog instance = b.create(); 
instance.show(); 

// Later when you need to update 
MyStringArray[0] = "puf"; 
ListView list = instance.getListView(); 
// Now according to whether you used cursor or array for supplying items to the builder 
// you have to cast adapter to either CursorAdapter or ArrayAdapter 
ArrayAdapter adapter = (ArrayAdapter)list.getAdapter(); 
adapter.notifyDataSetChanged(); 

You can find out more here.

Cuestiones relacionadas