¿Cómo implementar una vista de lista que se ajuste dinámicamente para ocultar el título?
Dificultades
Puntos clave: el método listView.addHeaderView() debe llamarse antes que el método setAdapter(); de lo contrario, se generará una excepción. En cuanto a por qué se produce la excepción, consulte el código fuente de
ListView. Entonces, si desea eliminar u ocultar headerView después de configurarlo, debe hacer un gran rodeo: guarde el adaptador
- elimine headerView - (o reemplace headerView) - y luego configure el adaptador en encima. Método para ocultar headerView:
Intente utilizar el atributo View.GONE para ocultarlo. La estructura 1.itemView es la siguiente: lt; LinearLayout
android:id="@ id/item_root" android:layout_width= "" fill_parent"
android:layout_height="50dip" android:orientation="vertical"
gt;lt;TextView android:id="@ id/tv_1 " /gt; .lt;Vista de texto
android: id="@ id/tv_2" /gt;lt;/LinearLayout gt; En este momento, existe la siguiente lógica: ListView
listView = xxxx; listView.addHearderView(item_root);
listView.setAdapter(adapter); adaptador.add(xxxxx); agregar datos
item_root.setVisibility(View. GONE); Por cierto, la última oración debería poder ocultar el headerView, pero el efecto real (probado en MX) es que no hay control en item_root, pero la altura de 50 dips ocupada por item_root aún existe. en otras palabras, el headerView original se convierte en
¡Un área en blanco! El efecto de View.INVISIBILE es el mismo, ¡Khan está muerto! height="50dip" android: orientación="vertical" gt; >
lt; LinearLayout android :id="@ id/item_container" lt; TextView
android.id="@ id/tv_1" /gt; /tv_2" /gt; p>
lt;/LinearLayoutgt;lt;/LinearLayoutgt;
Esta estructura agrega un diseño adicional (item_container) para encapsular los controles internos del elemento.
En este punto, si configuraVisibility(View.GONE)
.setVisibility(View.GONE) en item_container, ¡puede lograr perfectamente el propósito de ocultar HeaderView! Conclusión: Parece que la propiedad View.GONE no funciona en el diseño raíz
. Nuevo problema: si se utiliza un fondo de forma en item_root y existe un tamaño mínimo para ese fondo, este método volverá a fallar. Solución alternativa: si
debe agregar un fondo a HeaderView, establezca el fondo en item_container en lugar de en
item_root para evitar nuevos problemas.