Estoy tratando de mostrar una lista de cadenas que crece dinámicamente con una casilla de verificación en un GridView, que se encuentra en TableLayout.Cómo tener un GridView que se adapta a su altura cuando se agregan elementos
Puedo mostrar estas cadenas de "casillas de verificación" bien en una fila. Mi problema ocurre cuando dejo que el usuario agregue dinámicamente nuevas cadenas en GridView.
Creé un adaptador personalizado que recibe la lista de cadenas. Digamos que tenemos n cuerdas. El adaptador devuelve 'n + 1' para el recuento de elementos; en getView, devuelve:
- una vista con un LinearLayout, sí que tiene una casilla de verificación y un EditarTexto durante los primeros n elementos,
- un LinearLayout con un simple botón, con un subtítulo '+' para la ' n + 1º elemento.
Hasta ahora todo bien. Cuando se hace clic en el botón '+', agrego una cadena vacía a la lista de cadenas y llamo notifyDataSetChanged en el adaptador.
El GridView se redibuja con un elemento más. PERO conserva su altura original y crea una barra de desplazamiento vertical. Me gustaría que GridView expanda su altura (es decir, ocupe más espacio en la pantalla y muestre todos los elementos).
He intentado cambiar la pantalla a LinearLayout vertical en lugar de a TableLayout, pero los resultados son los mismos.
Este es el diagrama de mi pantalla:
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="none">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<!-- other lines omitted -->
<LinearLayout android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/wine_rack_explanation"
android:layout_gravity="center_vertical" />
<GridView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/gvRack"
android:columnWidth="90dp"
android:numColumns="auto_fit" />
</LinearLayout>
<!-- other lines omitted -->
</LinearLayout>
</ScrollView>
El elemento casilla + cadena desde el adaptador se define así:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<CheckBox android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/cbCoordinate"
android:checked="true"
/>
<EditText android:id="@+id/txtCoordinate"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
El elemento '+' botón se define así:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<Button android:id="@+id/btnAddBottle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/add_bottle_caption" />
</LinearLayout>
He intentado llamar a invalidate o invalideViews en el GridView después de agregar un elemento. También se llama invalidar en TableLayout y TableRow (en el diseño anterior de la pantalla). Sin éxito.
¿Alguna idea de por qué el GridView se niega a extender su altura?
(Nótese que estoy totalmente abierto a la utilización de otro ViewGroup que el GridView)
Tengo exactamente el mismo problema: ¿alguien sabe cómo hacer esto? –
Creo que puede ayudar a otros http://stackoverflow.com/a/23802813/5887689 –
quizás esta respuesta pueda ayudarlo https://stackoverflow.com/questions/21482989/how-to-assign-wrap-content-as -height-to-dynamically-loaded-gridview/46350213 # 46350213 –