重新计算了ListView的高度,发现最后一个item项却没有完整显示出来,或是数量越大最后几个是显示不出来的

碰到过几次同样的问题,但是今天还是做一个总结:

错误的原因是:

在布局文件中给ListView的属性增加了android:padding,那么计算ListView的高度=item的个数 x item的高度+item个数 x padding的值,这样才会正确;那如果非要在布局文件中增加该属性,那么只能根据上面给定的公式计算了。

这是重新计算ListView的高度:

/**
 * 重新计算listview的高度
 */
private int getListViewParams(ListView listView, BaseAdapter baseAdapter) {
    int totalHeight = 0;
    for (int i = 0, len = baseAdapter.getCount(); i < len; i++) { //listAdapter.getCount()返回数据项的数目
        View listItem = baseAdapter.getView(i, null, listView);
        listItem.measure(0, 0); //计算子项View 的宽高
        totalHeight += listItem.getMeasuredHeight(); //统计所有子项的总高度
    }
    return totalHeight;
}

实际调用中:

CommentDynamicAdapter cDynamicAdapter=new CommentDynamicAdapter(context,personalInfo.getCommentList());
viewHolder.lvDetailComment.setAdapter(cDynamicAdapter);
LinearLayout.LayoutParams recordLayoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
if(personalInfo.getCommentList().size()>3){
    recordLayoutParams.height=getListViewParams2(viewHolder.lvDetailComment, cDynamicAdapter);
}else{
    recordLayoutParams.height = getListViewParams(viewHolder.lvDetailComment, cDynamicAdapter);
}
recordLayoutParams.setMargins(20,0,0,0);//设置ListView距离屏幕左边的距离
viewHolder.lvDetailComment.setLayoutParams(recordLayoutParams);

在setAdapter之后去调用

//重新计算ListView的高度
private void setListViewItemHeight(ListView listView) {
    ListAdapter listAdapter = listView.getAdapter();
    if (listAdapter == null) {
        return;
    }
    int totalHeight = 0;
    for (int i = 0; i < listAdapter.getCount(); i++) {
        View listItem = listAdapter.getView(i, null, listView);
        listItem.measure(0, 0);
        totalHeight += listItem.getMeasuredHeight();
    }
    ViewGroup.LayoutParams params = listView.getLayoutParams();
    params.height = totalHeight
            + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
    listView.setLayoutParams(params);
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值