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.