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.
- Android ListView con estilo como iPhone agrupado UITableView
- Cambiar la altura del diseño relativo con la misma velocidad que el dedo del usuario Se mueve en el diseño
- Cómo arrastrar el elemento de lista desplegable a otro ListView
- TextView`s LinkMovementMethod bloquea el evento de toque listitem
- SearchView con múltiples fragmentos usando viewpager en android
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>
- ¿Cómo puedo replicar este patrón de interfaz de usuario: haga clic en el elemento ListView y expanda debajo de él?
- En Android, ¿cómo lograr un efecto de snap en un listview respetando la aceleración causada por fling?
- Cómo restablecer listview después de searchview se cierra en android?
- Adaptador con hasStableIds utilizando GUID o Strings como Ids
- Cómo rellenar una vista de lista de una base de datos SQLite
- ListFragment OnListItemClick no se llama
- Obtener el elemento seleccionado de customadapter listview Android
- Listview - Pie de página en la parte inferior de la pantalla
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); } }
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);
- El teléfono Android se reinicia al desinstalar
- Imagen de Android para cambiar el tamaño de la memoria del error