首页 > 技术文章 > 解决ListView在界面只显示一个item

gdpdroid 2016-11-17 19:20 原文

ListView只显示一条都是scrollview嵌套listView造成的,将listView的高度设置为固定高度之后,三个条目虽然都完全显示。但是这个地方是动态显示的,不能写死。故采用遍历各个子条目的高度,进行相加,然后再算取listview的总高度进行设置的方法。
只需要在setAdapter之后调用如下方法即可,代码如下:

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

 

推荐阅读