2011-02-26 32 views
17

El método ArrayAdapter.add() no funciona para mí. Estoy usando Eclipse Helios 3.6 con ADT Plugin, Target Source es un emulador Froyo 2.2 y 2.2 HTC Evo 4g. Aquí está mi clase javaAndroid ArrayAdapter.Add método no funciona

import android.app.Activity; 
    import android.os.Bundle; 
    import android.widget.ArrayAdapter; 

    public class Main extends Activity { 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 

      String[] entries = {"List Item A", "List Item B"}; 

      ArrayAdapter<String> arrAdapt=new ArrayAdapter<String>(this, R.layout.list_item, entries); 

      arrAdapt.setNotifyOnChange(true); 
      arrAdapt.add("List Item C"); 
     } 
    } 

Y aquí está mi diseño para el elemento de la lista (list_item.xml)

<?xml version="1.0" encoding="utf-8"?> 
<TextView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    android:padding="10dp" 
    android:textSize="12sp" 
</TextView> 

Me y el error está dando en el LogCat que dice

Causado por: java.lang.UnsupportedOperationException en java.util.AbstractList.add (AbstractList.java:411) en java.util.AbstractList.add (AbstractList.java:432) en android.widget.ArrayAdapter.add (ArrayAdapter.java:178)

Respuesta

38

Estoy aprendiendo, pero si estoy leyendo la source correctamente, el constructor de ArrayAdapter no copia las referencias a cada uno de los elementos en la matriz o lista. En su lugar, usa directamente la lista que se transfiere, o para una matriz usa asList() para tratar la matriz original como una lista. Como la lista devuelta por asList() sigue siendo solo una representación de la matriz subyacente, no puede hacer nada (como cambiar el tamaño) que no podría hacer con una matriz.

Intenta pasar una lista como ArrayList en lugar de una matriz.

ArrayList<String> entries = 
     new ArrayList<String>(Arrays.asList("List Item A", "List Item B")); 

ArrayAdapter<String> arrAdapt= 
     new ArrayAdapter<String>(this, R.layout.list_item, entries); 

arrAdapt.setNotifyOnChange(true); 
arrAdapt.add("List Item C"); 
+3

Si esto es correcto, la documentación de ArrayAdapter podría ser más clara. No se menciona la posibilidad de agregar elementos según el constructor utilizado. – erichamion

+0

¡Tiene razón, esto resolvió mis problemas y mi ListView dentro de LinearLayout ahora funciona! – Mike