gpt4 book ai didi

android - GridView在android中的可扩展列表中

转载 作者:IT老高 更新时间:2023-10-28 21:35:04 26 4
gpt4 key购买 nike

我想在可扩展列表中放置一个带有图像的 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>

最佳答案

我自己进行了大量搜索来解决这种情况,但到目前为止没有找到任何东西,所以我做了一个解决方法。

此解决方法假设您知道/可以检索列的宽度和网格单元渲染器的高度(布局 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;
}

通过上面的添加,我能够生成以下显示的布局:

expandable list with grid - portrait

expandable list with grid - landscape

希望对你也有帮助。

关于android - GridView在android中的可扩展列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5719637/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com