最近公司项目中在订单界面遇到这么一个问题,在ScrollView中嵌套ListView显示购买的多个商品,而scrollView中只显示了listview中的一个item,这是因为在ScrollView中嵌套ListView空间,无法正确的计算ListView的大小,故可以通过代码,根据当前的ListView的列表项计算列表的尺寸。
只要在listview设置适配器之后,在之后加上setListViewHeightBasedOnChildren(listview)这个方法就可以了。
/**
* 解决ScrollView嵌套ListView只显示一个item的问题
* @param listView
*/
public void setListViewHeightBasedOnChildren(ListView listView) {
// 获取ListView对应的Adapter
ListAdapter listadapter = listView.getAdapter();
if (listadapter == null) {
return;
}
int totalHeight = 0;
for (int i = 0, len = listadapter.getCount(); i < len; i++) {
// listAdapter.getCount()返回数据项的数目
View listItem = listadapter.getView(i, null, listView);
// 计算子项View 的宽高
listItem.measure(0, 0);
// 统计所有子项的总高度
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight+ (listView.getDividerHeight() * (listadapter.getCount() - 1));
// listView.getDividerHeight()获取子项间分隔符占用的高度
// params.height最后得到整个ListView完整显示需要的高度
listView.setLayoutParams(params);
}
参考文章:
http://blog.csdn.net/lch1251680944/article/details/52275654
解决GridView只显示一行的问题:设置其高度
//解决GridView只显示一行的原因 主动设置GridView的高度
ViewGroup.LayoutParams params = holder.mGridView.getLayoutParams();
View view = mAdapter.getView(0, null, holder.mGridView);
view.measure(0,0);
int height =view.getMeasuredHeight();
int totalHeight = holder.mGridView.getVerticalSpacing() * 2 + height * 2;
params.height = totalHeight;
holder.mGridView.setLayoutParams(params);