Desaparecer divisor en ListView cuando ArrayAdapter.isEnabled devuelve false
Estoy utilizando 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.
- Estilos / atributos de divisor predeterminados de ListView de Android
- Android looping infinito ListView?
- Por el poder de MergeAdapter, StickyListHeaders y ListViewAnimations combinados Soy el capitán Android
- Cambiar la vista vacía de ListView
- ¿Cómo desactivo la barra de autocorrección en los teclados de Android?
- Cuadro de lista con casillas de verificación en cuadro de diálogo de alerta
- ListView setText en una posición determinada
- Refrescante adaptador al tirar de ListView en android
- Resaltando el elemento seleccionado en el listview en android
- ¿Saber cuándo una vista en un ListView ha salido de la pantalla?
- Evento onClick no funciona en el control anidado de elementos de lista en android
- Listview con un adaptador personalizado que contiene CheckBoxes
- Animación de encabezados de un ListView dando ClassCastException
Devuelve true en areAllItemsEnabled () y false en isEnabled para el elemento específico. El elemento deshabilitado no podrá hacer clic, pero seguirá siendo capaz de ver las líneas de división
Nota: esto no funciona para Android 5
Es posible desactivar esencialmente un elemento de lista al proporcionar a cualquiera de sus elementos las siguientes propiedades.
android:focusable="true" android:clickable="true"
Por lo tanto, la siguiente disposición de elementos de lista no se puede hacer clic, pero mostrará divisores, sin 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.
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 utilizar la transparencia. La única solución realmente robusta es usar el archivo de nueve parches .
Se 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 utilizarlo en su adaptador:
convertView.setBackgroundResource(R.drawable.border_b1px_black);
Esto funcionó para mí. Esto mostrará el divisor, así como deshabilitar el clic en el elemento de la lista. Incluso en Android 5.0.
Establezca esto en el elemento de lista
android:focusable="true" android:clickable="false"
Ajustar apenas clickable a "falso" no trabajó para mí. Y sobreescribir isEnabled () causó el problema mencionado de ocultar el divisor en 5.0.
Y mi ListView se parece a esto.
<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()
devuelve false, entonces para cada fila específica que usted quiere fijar como no seleccionable vía isEnabled(int position)
el separador de línea (divisor) desaparece. Establecer areAllItemsEnabled()
para devolver true siempre, y jugar sólo con isEnabled(int position)
debería hacer filas específicas no seleccionables con el divisor mostrando muy bien.
En lugar de establecer isEnabled
, en su ListView
, defina android:listSelector="@android:color/transparent"
, así como android:focusable="true"
y android:clickable="true"
. Da el mismo efecto
setDivider(Drawable divider)
método setDivider(Drawable divider)
del listview
Tuve el mismo problema en Lollipop. Una solución para mí era cambiar el fondo en el listview a transparente. En mi caso me faltaba los divisores en el cajón de nav en las filas donde isEnabled
devuelve false cuando pongo un fondo a un color. Intente algo como:
android:background="@android:color/transparent"
Tendrá que habilitar las filas en el método isEnabled () para Android 5.0 y versiones posteriores.
Pero todavía puede desactivar las filas de otra manera:
En el ejemplo siguiente, estoy inhabilitando cada fila pero fila 0:
En su método getView para su adaptador:
if (position > 0) { convertView.setClickable(true); }
Por alguna razón la configuración de clickable a true desactiva la fila. No sé por qué. Supuse que al principio esto haría que se haga clic, pero no lo hace.
Referencia: Android ListView child Ver setEnabled () y setClickable () no hacer nada
Ver user622689 respuesta.
Tuve un problema similar. Lo resolví estableciendo explícitamente la altura del divisor de la vista de lista para ser "1dp"
<ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="match_parent" android:dividerHeight="1dp" />