列表视图高度不正确

时间:2016-02-13 08:16:49

标签: android listview

我使用此方法在运行时计算和设置listview高度

public static void setListViewHeightBasedOnChildren(ListView listView) {
    ListAdapter listAdapter = listView.getAdapter();
    if (listAdapter == null) {
        // pre-condition
        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);
    listView.requestLayout();
}

<?xml version="1.0" encoding="utf-8"?>

                                                                                               

<ListView
    android:layout_width="match_parent"
    android:layout_height="300dp"
    android:id="@+id/lv_cart" />
<View
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:background="@color/colorPrimary"
    android:layout_margin="10dp"/>

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="right"
    android:layout_marginRight="20dp">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="SubTotal:"
        android:textSize="18sp"
        android:textColor="#000"
        android:textStyle="bold"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Rs. 600"
        android:layout_marginLeft="5dp"
        android:textStyle="bold"
        android:textSize="18sp"
        android:textColor="@color/colorPrimary"
        android:id="@+id/tv_sub_total"/>
</LinearLayout>
<View
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:background="@color/colorPrimary"
    android:layout_margin="10dp"/>
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Choose Order Type:"
    android:layout_marginTop="20dp"
    android:layout_gravity="center_horizontal"
    android:textSize="20sp"
    android:textColor="#4CAF50"
    android:textStyle="bold"/>
<Button
    android:layout_width="200dp"
    android:layout_height="50dp"
    android:layout_gravity="center_horizontal"
    android:layout_marginTop="20dp"
    android:text="Delivery"
    android:textAllCaps="false"
    android:textSize="18sp"
    android:textColor="#ffffff"
    android:background="@color/colorPrimary"
    android:id="@+id/btn_delivery"/>
<Button
    android:layout_width="200dp"
    android:layout_height="50dp"
    android:layout_gravity="center_horizontal"
    android:layout_marginTop="20dp"
    android:text="PickUp"
    android:textAllCaps="false"
    android:textSize="18sp"
    android:textColor="#ffffff"
    android:background="@color/colorPrimary"
    android:id="@+id/btn_pickup"/>
</LinearLayout>
</ScrollView>

我调试此方法并检查此方法是否根据子项返回正确的高度。但是当显示listview时,显示列表的视图不正确。 我在listview中添加了8个项目,但是当我运行它时它只显示5个,但是返回的方法的高度是正确的,因为它显示1个视图高度= 51和8个视图高度= 415,包括分隔符高度。 我也在xml中尝试了listview高度,匹配父级和换行内容,但结果相同。

这里有什么问题?

1 个答案:

答案 0 :(得分:0)

请求尝试这个:

listView.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, the height here));