2010-07-08 22 views
88

Estoy tratando de hacer una lista que contenga nombres. Esta lista debe ser modificable (agregar, eliminar, ordenar, etc.). Sin embargo, cada vez que intenté cambiar los elementos en ArrayAdapter, el programa se bloqueó, con el error java.lang.UnsupportedOperationException. Aquí está mi código:No se puede modificar ArrayAdapter en ListView: UnsupportedOperationException

ListView panel = (ListView) findViewById(R.id.panel); 
String[] array = {"a","b","c","d","e","f","g"}; 
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
android.R.layout.simple_list_item_1, array); 
adapter.setNotifyOnChange(true); 
panel.setAdapter(adapter); 

Button button = (Button) findViewById(R.id.button); 
button.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     adapter.insert("h", 7); 
    } 
}); 

He intentado insertar, eliminar y borrar los métodos, y ninguno de ellos funcionó. ¿Alguien me diría lo que hice mal?

Respuesta

254

Lo probé, yo mismo ... Encontré que no funcionaba. Así que reviso el código fuente de ArrayAdapter y descubrí el problema. El ArrayAdapter, al ser inicializado por una matriz, convierte la matriz en una Lista abstracta (Lista) que no se puede modificar.

Solución Utilice un ArrayList<String> vez utilizando una matriz al inicializar el ArrayAdapter.

String[] array = {"a","b","c","d","e","f","g"}; 
ArrayList<String> lst = new ArrayList<String>(Arrays.asList(array)); 
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
android.R.layout.simple_list_item_1, lst); 

¡Salud!

+7

¡Muchas gracias! Me salvaste horas de frustración. ¿Te importaría explicarme por qué String [] no funcionó? – Ryan

+2

Agregó una edición ... :) por favor léala nuevamente. – st0le

+0

@Ryan no se puede insertar en una matriz, puede en una lista, a menos que la implementación de la lista no lo permita. Si sus datos de respaldo no van a cambiar, ArrayAdapter le permite usar una técnica más eficiente en cuanto a la memoria. –

Cuestiones relacionadas