GridView dentro de la lista expandible en android

Quiero poner una gridview con imágenes dentro de una lista expandible … Ya he hecho eso, pero la vista de cuadrícula no muestra todos los elementos …

¿Cómo puedo hacer que mi hijo de lista expandible se adapte al tamaño de gridview?

LIST ADAPTER

public class CustomListAdapter extends BaseExpandableListAdapter { String[] catg = { "Administração, Escritorio e Industria", "Cultura e Entretenimento", "Educação e Crianças", "Eventos e Estado do tempo", "Amigos, Familia e Habitações", "Multimédia", "Diversos", "Números e Letras", "Restaurantes e Hoteis", "Desporto, Saude e Beleza", "Lojas", "Turismo e Natureza", "Transportes" }; Context myctx; @Override public Object getChild(int groupPosition, int childPosition) { // TODO Auto-generated method stub return null; } @Override public long getChildId(int groupPosition, int childPosition) { return childPosition; } @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { ViewGroup item = getViewGroupChild(convertView, parent); GridView label = (GridView) item.findViewById(ipvc.estg.placebook.R.id.gridview); label.setAdapter(new GridAdapter(parent.getContext(), groupPosition+1)); return item; } private ViewGroup getViewGroupChild(View convertView, ViewGroup parent) { // The parent will be our ListView from the ListActivity if (convertView instanceof ViewGroup) { return (ViewGroup) convertView; } Context context = parent.getContext(); LayoutInflater inflater = LayoutInflater.from(context); ViewGroup item = (ViewGroup) inflater.inflate(ipvc.estg.placebook.R.layout.expandable_list_row, null); return item; } @Override public int getChildrenCount(int groupPosition) { return 1; } @Override public Object getGroup(int groupPosition) { return catg[groupPosition]; } @Override public int getGroupCount() { return catg.length; } @Override public long getGroupId(int groupPosition) { return groupPosition; } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { View item = getViewGroupGroup(convertView, parent); TextView text = (TextView) item.findViewById(android.R.id.text1); text.setText(catg[groupPosition]); return item; } private View getViewGroupGroup(View convertView, ViewGroup parent) { // The parent will be our ListView from the ListActivity if (convertView instanceof View) { return (View) convertView; } Context context = parent.getContext(); LayoutInflater inflater = LayoutInflater.from(context); View item1 = (View) inflater.inflate(android.R.layout.simple_expandable_list_item_1, null); return item1; } @Override public boolean hasStableIds() { // TODO Auto-generated method stub return false; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { // TODO Auto-generated method stub return true; } } 

DISPOSICIÓN DE LA LISTA DE LA LISTA

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout android:id="@+id/linearLayout1" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"> <GridView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/gridview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:columnWidth="50dp" android:numColumns="auto_fit" android:verticalSpacing="10dp" android:horizontalSpacing="10dp" android:stretchMode="columnWidth" android:gravity="center" /> </LinearLayout> 

He hecho toneladas de búsquedas propias para resolver esta situación, pero no encontré nada hasta ahora, así que he hecho una solución.

Esta solución supone que sabe / puede recuperar el ancho de las columnas y la altura de los procesadores de celda de la cuadrícula (el tamaño de dp establecido en la presentación xmls).

Debería insertar algunas líneas más dentro del método getChildView su ExpandableListAdapter :

 @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { ViewGroup item = getViewGroupChild(convertView, parent); GridView label = (GridView) item.findViewById(ipvc.estg.placebook.R.id.gridview); label.setAdapter(new GridAdapter(parent.getContext(), groupPosition+1)); // initialize the following variables (i've done it based on your layout // note: rowHeightDp is based on my grid_cell.xml, that is the height i've // assigned to the items in the grid. final int spacingDp = 10; final int colWidthDp = 50; final int rowHeightDp = 20; // convert the dp values to pixels final float COL_WIDTH = getBaseContext().getResources().getDisplayMetrics().density * colWidthDp; final float ROW_HEIGHT = getBaseContext().getResources().getDisplayMetrics().density * rowHeightDp; final float SPACING = getBaseContext().getResources().getDisplayMetrics().density * spacingDp; // calculate the column and row counts based on your display final int colCount = (int)Math.floor((parentView.getWidth() - (2 * SPACING)) / (COL_WIDTH + SPACING)); final int rowCount = (int)Math.ceil((intValues.size() + 0d) / colCount); // calculate the height for the current grid final int GRID_HEIGHT = Math.round(rowCount * (ROW_HEIGHT + SPACING)); // set the height of the current grid label.getLayoutParams().height = GRID_HEIGHT; return item; } 

Con la adición anterior, pude producir los siguientes diseños mostrados:

Lista ampliable con rejilla - retrato

y

Lista extensible con rejilla - paisaje

Espero que pueda ayudarle también.

Todo lo que necesita hacer es cambiar el GrideView con ExpandableHeightGridView

Y configurar XML con

 android:isScrollContainer="false" 

Y en código

 expandableHeightGridView.setExpanded(true); 

¿Qué hay de usar una Galería en lugar de GridView? Mira esto

Pruebe este código fuente completo de github de la vista de lista desechable con gridview

https://github.com/coolwd10/ExpandablelistwithGirdview

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.