studio - llenar un listview android
El divisor que desaparece en ListView cuando ArrayAdapter.isEnabled devuelve falso (10)
Estoy usando ListActivity
con mi propia clase ArrayAdapter
. Cuando ArrayAdapter.areAllItemsEnabled()
los métodos ArrayAdapter.areAllItemsEnabled()
y ArrayAdapter.isEnabled()
el divisor entre algunas celdas de la vista de lista desaparece. ¿Alguien sabe cómo evitar esto? Necesito los divisores para mostrar incluso para las celdas deshabilitadas.
Deberá habilitar las filas en el método isEnabled () para Android 5.0 y versiones posteriores.
Pero aún puede desactivar las filas de otra manera:
En el siguiente ejemplo, estoy deshabilitando cada fila, pero la fila 0:
En su método getView para su adaptador:
if (position > 0) {
convertView.setClickable(true);
}
Por alguna razón, la configuración de hacer clic en verdadero deshabilita la fila. No estoy seguro por qué. Supuse que al principio esto haría que se pueda hacer clic, pero no es así.
Referencia: Android ListView child View setEnabled () y setClickable () no hacen nada
Ver la respuesta del usuario622689.
Devuelve true en areAllItemsEnabled () y false en isEnabled para un elemento específico. No se podrá hacer clic en el elemento desactivado, pero aún podrás ver las líneas divisorias
Nota: Esto no funciona para Android 5
En esencia, puede deshabilitar un elemento de la lista dando a cualquiera de sus elementos las siguientes propiedades.
android:focusable="true"
android:clickable="true"
Por lo tanto, no se podrá hacer clic en el siguiente diseño de elemento de la lista, pero se mostrarán los divisores, sin la necesidad de implementar areAllItemsEnabled()
o isEnabled(int position)
.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:focusable="true"
android:clickable="true">
<TextView
android:text="Large Text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
Esto puede ayudar en Android 5.0 donde la respuesta original ya no parece funcionar.
En lugar de configurar isEnabled
, en su ListView
, configure android:listSelector="@android:color/transparent"
, así como android:focusable="true"
y android:clickable="true"
. Da el mismo efecto
Esto funcionó para mí. Esto mostrará el divisor y desactivará el elemento de clic en la lista. Incluso en Android 5.0.
Establecer esto en el elemento de la lista
android:focusable="true"
android:clickable="false"
Configurar solo hacer clic en ''falso'' no funcionó para mí. Y Anulación de isEnabled () provocó el problema mencionado anteriormente de ocultar el divisor en 5.0.
Y mi ListView se ve así.
<ListView
android:id="@+id/lvItems"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:divider="@color/Gray"
android:dividerHeight="1px">
</ListView>
No android:listSelector="@android:color/transparent"
necesario aquí
Puedo verificar que cuando areAllItemsEnabled()
devuelva false, entonces para cada fila específica que quiera establecer como no seleccionable mediante isEnabled(int position)
el separador de línea (divisor) desaparece. Establecer areAllItemsEnabled()
para que siempre devuelva verdadero, y jugar solo con isEnabled(int position)
debe hacer que las filas específicas no se isEnabled(int position)
seleccionar con el divisor bien isEnabled(int position)
.
Todas las soluciones anteriores tienen un problema con la compatibilidad (funciona bien en una versión de Android, pero falla en otras), especialmente si desea usar la transparencia. La única solución realmente robusta es usar un archivo de nueve parches .
Puede descargar desde: http://ge.tt/517ZIFC2/v/1?c
Simplemente coloque el png elegido en el directorio drawable-nodpi
para evitar el remuestreo.
Y úsala en tu Adaptador:
convertView.setBackgroundResource(R.drawable.border_b1px_black);
Tuve el mismo problema en Lollipop. La solución para mí fue cambiar el fondo en la vista de lista a transparente. En mi caso me faltaban los divisores en el cajón de navegación en las filas donde isEnabled
devuelve falso cuando configuro un fondo en un color. Pruebe algo como:
android:background="@android:color/transparent"
Tuve un problema similar. Lo resolví al establecer explícitamente el alto del divisor de la vista de lista como "1dp"
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:dividerHeight="1dp"
/>
use el setDivider(Drawable divider)
de la lista