android listview footer

android - Agregar un encabezado/pie de página en una vista de lista en xml



listview footer (3)

Sé cómo agregar un encabezado o un pie de página en JAVA, pero me preguntaba si podría agregarlo directamente en el XML. No querría simular esto, ¡pero realmente agregarlo como pie de página o encabezado!


Así es como funcionó para mí, en mi clase de Adaptador que extiende el Adaptador Base. Estoy apuntando a la API 23:

@Override public View getView(int position, View view, ViewGroup parent) { if (position == 0) { if (view == null) { LayoutInflater layoutInflater = LayoutInflater.from(mContext); view = layoutInflater.inflate(R.layout.test_results_header, parent, false); } } else { if (view == null) { LayoutInflater layoutInflater = LayoutInflater.from(mContext); view = layoutInflater.inflate(R.layout.test_result_item, parent, false); } }

Bastante simple, inflo un encabezado XML para la posición 0 y el contenido XML para el resto. Si conoce la posición en la que desea un encabezado o cualquier otro XML, en su lógica necesitará verificar la posición e inflar el XML correspondiente para esa posición.


Estaba intentando lograr lo mismo (para mantener mi código más limpio y usar XML para el marcado y el código fuente para la lógica), pero la única solución que encontré es definir la vista del encabezado con XML en algún lugar de su diseño y luego separarlo y poner en ListView como encabezado.

Por ejemplo, teniendo este XML:

<ListView android:id="@+id/myListView"> </ListView> <LinearLayout android:id="@+id/myHeader"> .... </LinearLayout>

Puedes hacer esto en tu código:

ListView myListView = (ListView) findViewById(R.id.myListView); LinearLayout myHeader = (LinearLayout) findViewById(R.id.myHeader); // Let''s remove the myHeader view from it''s current child... ((ViewGroup) myHeader.getParent()).removeView(myHeader); // ... and put it inside ListView. myListView.addFooterView(myHeader);

Básicamente, lo que hacemos aquí es simplemente separar el LinearLayout inflado de su padre y establecerlo como hijo de encabezado ListView.

Esta no es una solución ideal, pero sigue siendo más fácil que crear / inflar el encabezado manualmente. Además, esto utiliza el poder de la inflación de XML y la reutilización de la vista si está utilizando esto dentro de algún patrón de "titular".

Espero que esto ayude a alguien.


No, no creo que sea posible. Según el código fuente de ListView, solo hay overScrollHeader/overScrollFooter disponibles a partir de los atributos XML. Pero estos atributos solo aceptan dibujables.

Si no quieres usar trucos con diseños arriba / abajo de ListView . Puede extender ListView e implementar su propio soporte de pie de página y encabezado en la View personalizada. No es tan difícil porque el pie de página y el encabezado ya están implementados. Solo tiene que agregar el análisis de atributos XML en el constructor de su vista personalizada.