2011-02-24 31 views
6

Estoy tratando de agregar un encabezado complejo/no trivial a un ListView (y un pie de página ligeramente menos complejo) que necesita desplazarse junto con el resto del contenido.Android ListView con encabezado complejo

La cabecera consiste en

  • un TextView con texto en negrita, fondo transparente negro y esquinas redondeadas
  • un TextView con el texto normal, negro de fondo transparente
  • un ImageView
  • un botón puede hacer clic (realmente un ImageView con onClick) y un divisor

No estoy familiarizado con addHead erView, pero si trato de agregar una vista compleja (que consiste en LinearLayout con varios elementos secundarios), solo veo el primer elemento secundario del encabezado complejo en la vista de lista como encabezado.

Además, el diseño se rompe (porque el encabezado se puede diseñar de forma transparente, el ListView no lo está. Quizás esto se puede resolver añadiendo más estilo al ListView y sus entradas (que no deberían ser transparentes), pero tengo la impresión de que simplemente estoy llegando a los límites de ListViews aquí.

¿Se puede hacer esto? ¿Alguien sabe de alguna aplicación (o mejor, ejemplos de código) que tengan un encabezado complejo similar? Todos los demás ejemplos que tengo he podido encontrar son encabezados triviales: botones, textviews o imágenes (en línea y en SO) con un estilo poco interesante.

+0

publique su diseño xml y código. –

+0

Veré si puedo reproducir un ejemplo mínimo, pero no tengo nada útil que publicar en este momento, de ahí mi principal pregunta: ¿puede hacerse? Si alguien puede confirmar/proporcionar muestras, entonces puedo invertir más tiempo para que esto funcione. Sin embargo, tengo la sensación de que es un callejón sin salida. –

Respuesta

5

He intentado volver a implementar mi vista de lista de desplazamiento desde cero, más o menos de la siguiente manera:

  • un main.xml una imagen de fondo y una sola ListView, con un margen 20dip y algún estilo específico con:

    <item name="android:cacheColorHint">#00000000</item> 
    <item name="android:scrollbars">@null</item> 
    <item name="android:background">@android:color/transparent</item> 
    
  • un headerlayout.xml contiene un diseño lineal (vertical), que contiene un TextView, ImageView y otro TextView. El primer TextView está diseñado con las esquinas redondeadas, ambas textviews tienen un estilo transparente y un clicklistener en la imagen.

  • (un pie de página de estilo similar)
  • una entrada personalizada para cada elemento de lista con un fondo blanco sólido.

El encabezado/pie de página se añaden aproximadamente como sigue

ListView list = (ListView) findViewById(R.id.list); 
View header1 = getLayoutInflater().inflate(R.layout.listheader, null, false); 
View footer = getLayoutInflater().inflate(R.layout.listfooter, null, false); 
ImageView image = (ImageView) header1.findViewById(R.id.image); 

list.addHeaderView(header1, null, false); 
list.addFooterView(footer, null, false); 
list.setAdapter(new MenuAdapter()); 

Nada de esto es en realidad verdaderamente especial. Es principalmente una cuestión de hacer las cosas en el orden correcto, despojado y correctamente diseñado.

0

Mi sugerencia sería que crees una vista personalizada para esto demasiado com elemento de vista de lista plicada. Aparentemente, esto es lo que sugieren los desarrolladores de Android en Google IO. Si puede hacerlo en la vista personalizada, se resolverán todos sus problemas.

+0

esa es mi solución actual: un LinearLayout vertical muy grande con entradas individuales en ScrollView. Pero no estoy seguro de si esto funcionará con cientos de entradas (probablemente 250 como máximo), ListView tiene optimizaciones para crear entradas a demanda según su desplazamiento –

+0

¡Uy, si no lo transmití correctamente, pero necesita implementar solo la lista personalizada muestra elementos, no la lista en sí misma. – the100rabh