Hacer vista de encabezado (no encabezado de sección) de ListView Stick en la parte superior
Tengo un ListView con un HeaderView.
Quiero una de las vistas en el HeaderView
para pegarse en la parte superior.
- Android ListView con encabezado y pie de página fijos
- No se puede establecer OnCheckedChangeListener en una casilla de verificación
- ActionBar - PullToRefresh
- Android: requestLayout () incorrectamente llamado
- Forzar Android Fast Scroll Bar en ListViews para dibujar dentro de relleno
He visto muchos ejemplos de encabezados de sección pegajosos.
También miré StickyScrollViewItems pero puesto que utilizo un ListView
, no puedo utilizar un ScrollView
.
¿Hay una biblioteca disponible para esto o debo apenas sobreescribir el OnScrollListener
del ListView
?
Gracias.
- setChoiceMode (ListView.CHOICE_MODE_SINGLE) ¿Cómo cancelar la selección?
- Java.lang.OutOfMemoryError: tamaño de mapa de bits supera el presupuesto de VM en ListView y imágenes de carga perezosa
- ListView selector de filas en el API nivel 10?
- Barra de progreso en el fondo del elemento de lista
- El evento Onclick se realiza incluso con un clic largo
- La altura de la vista de niño de Android no coincide con el padre en el elemento de ListView
- Cómo utilizar SparseArray como una fuente para el adaptador?
- Cómo crear ListView multinivel en Android
Acabo de escribir una carga de código que hace esto que no puedo compartir por razones contractoral. Básicamente siga el enfoque descrito aquí y aplique a una vista de lista en lugar de una vista de desplazamiento.
Los puntos principales son:
- Cree una vista de contenedor que contenga su encabezado flotante / pegajoso y su lista como hermanos
- Utilice un método proxy al agregar encabezados con un booleano isSticky – si es pegajoso, a continuación, agregue un encabezado falso en blanco a la vista de lista del mismo tamaño y su vista de cabecera prevista al encabezado de encabezado flotante (utilice un diseño relativo aquí)
- Establezca un listener de desplazamiento del listview que rastrea la posición px superior de la vista de encabezado falso en la lista y establezca esto como un margen superior del encabezado flotante que se encuentra dentro de un diseño relativo
- Manejar todos los casos de bordes molestos / OEM exceso de basura crap para conseguir que funcione en todas las situaciones (como esto para samsung)
Recuerde establecer la posición inicial del encabezado flotante / fijado después de haber establecido la vista de lista.
Me siento un poco involucrado y toma algunos ajustes para tener la derecha – este es un momento en el que envidio iOS y cualquier iOS devs va a pensar su slacking, ya que toma un tiempo para implementar: D
Todas las librerías Open que hay en el momento de escribir están usando vistas de desplazamiento o encabezados de vista de lista. Este problema con estos enfoques es que las vistas de lista reciclar vistas (por lo que a diferencia de las vistas de desplazamiento que no puede limitarse a mantener una referencia a la vista ficticia) y también las libras actuales parecen duplicar las vistas pegajosas utilizando el adaptador getView
métodos y así sucesivamente – que no es bueno para Vistas de encabezado de vista de lista dinámica, ya que no se reciclan y sólo pueden tener un padre, por lo reparenting sería molesto (y en mi caso tiene una gran cantidad de funcionalidad por lo que no quiero crear dos vistas del mismo tipo y shoehorn las lib Para encajar mis soluciones)
No sé de ninguna biblioteca que le permite hacer esto, pero lo que hago para un encabezado es utilizar un RelativeLayout
para mi xml que tendrá el ListView
. A continuación, cree su vista de encabezado como quiera y déle la propiedad
android:layout_alignParentTop="true"
Entonces dé su ListView
android:layout_below="@id/idOfHeaderView
Esta es la forma más fácil que conozco de acoplar una vista de cabecera en la parte superior. Ha funcionado para mí cada vez. Espero que esto ayude.