2010-01-07 22 views
14

En mi ListActivity, necesito vistas de encabezado y pie de página (en la parte superior e inferior de la lista) para usar como botones de página anterior y de página siguiente, respectivamente, porque quiero muestra solo 20 elementos a la vez.android listviews: vistas de encabezado y pie de página

puse mis puntos de vista de cabecera y el pie haciendo:

getListView().addHeaderView(myHeaderView); 
getListView().addFooterView(myFooterView); 
setListAdapter(adapter); 

Esto funciona bien, pero tengo que quitar de forma dinámica y añadir estos puntos de vista de encabezado y pie de página, ya que algunas páginas de mi lista pueden no tener una próxima botón de página o botón de página anterior.

El problema es que no puedo llamar a addHeaderView o addFooterView después de haber llamado a setListAdapter.

¿Hay alguna forma de evitar esto?

+0

que normalmente cortar alrededor esto mediante la creación de una vista a establecer como un pie de página justo antes de que me puse el adaptador, y luego eliminando la vista nuevamente –

+0

Esto no es un error ni un descuido, pero funciona según lo previsto :) –

+1

¿Puedes elaborar un poco? – Matthias

Respuesta

10

¿Por qué no simplemente colapsar el encabezado y pie de página a la altura cero, o gris los botones (incluso mejor).

Y la mejor experiencia de usuario, en mi opinión, sería cargar dinámicamente más elementos cuando sea necesario (es decir, al desplazarse), como lo hace la aplicación incorporada de Gmail.

+4

De acuerdo en el enfoque de carga dinámica. Incluso creé un código reutilizable para ayudar con esto: http://github.com/commonsguy/cwac-endless – CommonsWare

+3

Si mal no recuerdo, 'ListView' no vuelve a diseñar las vistas de encabezado o pie de página, incluso si configura su visibilidad a 'INVISIBLE' o' GONE', por lo que queda un gran espacio en blanco. –

+0

En cualquier caso, esconderlos sería discordante; la desactivación suena mejor. Y el enfoque de Mark (commonsware.com) es probablemente el mejor. –

3

Sí, esto es un error o descuido en el componente ListView. Puede solucionar esto escribiendo su propio WrapperListAdapter que maneja la adición y eliminación de elementos de la lista fija, pero puedo decirle que no es completamente sencillo de hacer.

Alternativamente — y mucho más fácil — puede agregar un componente fijo por encima o por debajo de ListView donde coloca los botones siguiente y anterior.

+1

Como una actualización, como menciona Romain Guy, este es el comportamiento previsto. Le pregunté a Android "horas de oficina" por qué este es el caso.Por lo que recuerdo, es porque el encabezado y los pies de página se tienen en cuenta como elementos de la lista una vez que la lista está vinculada a un cursor, por lo que agregarlos/eliminarlos arruinaría los desplazamientos. Si desea hacer un cambio, puede volver a vincular el adaptador a la lista. Sería bueno si hubiera un contenedor que pudiera manejar esto en el SDK, pero definitivamente es posible crear el suyo de todos modos. –

2

¿Qué hay de restablecer el adaptador en cada momento es necesario agregar la vista de encabezamiento, de esta manera:

ListView.FixedViewInfo headerInfo = getListView().new FixedViewInfo(); 
headerInfo.isSelectable=false ; 
headerInfo.view = feedInfoView; 
headerInfos.add(headerInfo); 
headerViewListAdapter = new HeaderViewListAdapter(headerInfos,null,adapter); 
getListView().setAdapter(headerViewListAdapter); 
+0

¿qué tipo de objeto es feedInfoView? –

Cuestiones relacionadas