ArrayList Adapter (para ListView) sólo muestra el primer elemento agregado

Edit3: Mi propio diseño de lista de artículos:

<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/text1" android:layout_width="match_parent" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceListItemSmall" android:gravity="center_vertical" /> 

Edit2: Honestamente, podría hacer un for-loop que crea botones para cada archivo. Esto es demasiado dolor de cabeza para valer la pena el tiempo.

Edit: Quisiera enfatizar el hecho de que he copiado + pegado mi código exacto en una nueva aplicación de prueba y funciona bien. Eso podría darles una pista.

Después de toneladas de depuración, he reducido un problema. Estoy intentando agregar artículos (archivos) a un ArrayList, después poner eso en un ArrayAdapter, y finalmente exhibir los artículos en un ListView. El problema es que sólo se muestra el primer elemento agregado.

Aquí está cómo intentaba hacerlo:

 ListView listView = (ListView) view.findViewById(R.id.templateFilesList); ArrayList<String> templateList = new ArrayList<>(); File myDir = getContext().getFilesDir(); File[] templateFiles = myDir.listFiles(); int length = templateFiles.length; for(int i = 0; i < length; i++){ templateList.add(templateFiles[i].getName()); } ArrayAdapter arrayAdapter = new ArrayAdapter<>(getContext(), android.R.layout.simple_list_item_1, templateList); listView.setAdapter(arrayAdapter); 

La matriz templateFiles [] obtiene correctamente los 8 archivos en Internal Storage (confirmado a través de logcat / debugger), pero sólo el primer elemento se muestra en ListView. Aquí está una mirada más clara al problema:

 // If I replace the for loop with this: templateList.add(templateFiles[1].getName()); templateList.add(templateFiles[0].getName()); 

Sólo se muestra templateFiles [1]. Del mismo modo, si hago esto:

  templateList.add(templateFiles[0].getName()); templateList.add(templateFiles[1].getName()); 

Sólo se muestra templateFiles [0]. ¿Alguna idea de lo que va mal?

Aquí está mi XML:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.template_housing.MyTemplatesFrag" android:orientation="vertical" android:gravity="center_horizontal" > <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/my_templates" android:textSize="34sp" android:textColor="@color/black" android:background="@color/Gold1" android:gravity="center_horizontal" android:padding="5dp" android:layout_marginBottom="10dp" /> <ListView android:id="@+id/templateFilesList" android:layout_width="match_parent" android:layout_height="match_parent" > </ListView> 

Si está actualizando el contenido de su adaptador, debería llamar a notifyDataSetChanged() para asegurarse de que su adaptador sepa que su contenido ha cambiado

Copié su código y lo corrí en Android Studio. Parece que no hay problema.

Aquí está mi código de actividad (el mismo código xml), la única diferencia es que uso una Actividad, puedes usar un Fragmento.

 public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ListView listView = (ListView) findViewById(R.id.templateFilesList); ArrayList<String> templateList = new ArrayList<>(); File myDir = getFilesDir(); File[] templateFiles = myDir.listFiles(); int length = templateFiles.length; //case 1: in my project, length is 1, show only one element, see case2. // for (int i = 0; i < length; i++) { // templateList.add(templateFiles[i].getName()); // } //case 2: try to add simple strings, //because you said put simple strings in the list could cause the problem, too. templateList.add("a1"); templateList.add("a2"); templateList.add("a3"); ArrayAdapter arrayAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, templateList); listView.setAdapter(arrayAdapter); } } 

Introduzca aquí la descripción de la imagen

Compartí mi código en GitHub . Recomiendo encarecidamente publicar su código completo en Github, vamos a revisar su código.

Intente convertirlo a una serie de cadenas:

 String [] templateListArray = templateList.toArray(new String[templateList.size()]); 

Y luego hacer la asignación de la siguiente manera:

 ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(getContext(), android.R.layout.simple_list_item_1, templateListArray); 

Espero que esto lo arreglará.

¿Puede publicar el archivo XML simple de la lista de elementos 1 también. Este problema no está relacionado con el código Java tiene algo que ver con XML y el tamaño de los elementos. Intente eliminar esa vista de texto en la parte superior de la vista de lista y su vista simple de elemento de lista debería tener wrap content como altura de diseño.

Y si todavía desea utilizar la vista de texto, puede utilizar el atributo de peso. Dé a su textview un peso de 0 y la lista ve un peso de 1.

Es posible que su adaptador de matriz no esté configurando correctamente y por lo tanto no está funcionando correctamente, así que trate de reemplazar el adaptador de matriz por debajo del código y compruebe si está funcionando,

  ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, templateList); 
  • Android: ListView con un modelo de datos complejos
  • Android ListView notifyDataSetChanged () de Service
  • Mantenga un valor EditText en un ListView
  • ¿Cómo llenar un ListView con una ArrayList?
  • Adaptador personalizado para la vista de lista
  • Cambiar la listaVer el color seleccionado en Android
  • Cómo rellenar un listview asincrónicamente?
  • ListView personalizado para AlertDialog
  • Cómo filtrar ListView a través de EditText
  • Android: getView () llamado dos veces en el adaptador personalizado
  • SearchView en ListView con un adaptador personalizado
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.