在Android中的GridView里面的Expandable列表

我想把一个GridView与可扩展列表中的图像…我已经做到了,但GridView不显示所有项目…

我怎样才能让我的可扩展列表的孩子适应gridview的大小?

列表适配器

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; } } 

列表行布局

 <?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> 

为了解决这个问题,我自己做了大量的search工作,但到目前为止还没有find任何东西,所以我做了一个解决方法。

此变通办法假定您知道/可以检索您的列的宽度和网格单元格渲染器的高度(在版式xml中设置的dp大小)。

你应该在你的ExpandableListAdaptergetChildView方法中插入更多的行:

 @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; } 

随着上述添加,我能够产生以下显示的布局:

可扩展列表与网格 - 肖像

可扩展列表与网格 - 景观

我希望它能帮助你。

所有你需要做的就是用ExpandableHeightGridView改变GrideView

并configurationXML

 android:isScrollContainer="false" 

并在代码中

 expandableHeightGridView.setExpanded(true); 

如何使用画廊而不是GridView? 检查一下!

用gridview试用这个github的消耗性列表视图的全部源代码

https://github.com/coolwd10/ExpandablelistwithGirdview