Android 将高度设置为listview不工作(listview在scrollview内)

Android 将高度设置为listview不工作(listview在scrollview内),android,listview,android-listview,Android,Listview,Android Listview,我有一个在Scrollview中包含ListView的布局。我使用了下面的代码来设置ListView高度 //Utils.java public static boolean setListViewHeightBasedOnItems(ListView listView) { ListAdapter listAdapter = listView.getAdapter(); if (listAdapter != null) { int numberOfItems

我有一个在Scrollview中包含ListView的布局。我使用了下面的代码来设置ListView高度

//Utils.java

public static boolean setListViewHeightBasedOnItems(ListView listView) {

    ListAdapter listAdapter = listView.getAdapter();
    if (listAdapter != null) {

        int numberOfItems = listAdapter.getCount();

        // Get total height of all items. 
        int totalItemsHeight = 0;
        for (int itemPos = 0; itemPos < numberOfItems; itemPos++) {
            View item = listAdapter.getView(itemPos, null, listView);
            item.measure(0, 0);
            totalItemsHeight += item.getMeasuredHeight();
        } 

        // Get total height of all item dividers. 
        int totalDividersHeight = listView.getDividerHeight() * (numberOfItems - 1);

        // Set list height. 
        ViewGroup.LayoutParams params = listView.getLayoutParams();
        params.height = totalItemsHeight + totalDividersHeight;
        listView.setLayoutParams(params);
        listView.requestLayout();

        return true; 

    } else { 
        return false; 
    }
}
上述错误指向utils.java中的第21行,即item.measure0,0

如何解决这个问题

我的布局是

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/scroll"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_below="@+id/imageView"
    android:scrollbars="none" >

    <RelativeLayout
       android:id="@+id/slider"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:orientation="vertical" >

       <ImageView
          android:id="@+id/imageView"
          android:layout_width="match_parent"
          android:layout_height="170dp"
          android:layout_alignParentLeft="true"
          android:layout_alignParentTop="true"
          android:contentDescription="@string/app_name"
          android:scaleType="fitXY" />

        .............

        <ListView
            android:id="@+id/listView1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="true"
            android:divider="@null"
            android:scrollbars="none"
            android:layout_below="@+id/relativeLayout2"
            android:layout_marginLeft="5dp"
            android:layout_marginRight="5dp"
            android:layout_marginBottom="5dp"
            android:background="#0B1F20" >
        </ListView>
     </RelativeLayout>
</ScrollView>

有三种方法可以解决这个问题。

您在这里做错了两件事。ListView不应该有换行内容的高度,也不应该在ScrollView中使用。您希望在这里实现什么?ListView不应位于ScrollView内。事实上,对于相同的滚动方向,任何可滚动容器都不应该位于另一个可滚动容器的内部。正如前面的评论所指出的,在滚动视图中使用listview是一个非常糟糕的主意。查看布局,您可以通过将ImageView作为标题添加到ListView中来实现相同的效果。@akash93:-好的,那么如何通过计算ListView中项目的高度来设置ListView的高度。您不需要。。。只需将scrollview替换为listview,并添加一个imageview作为标题
09-10 14:23:49.592: W/System.err(4922): java.lang.NullPointerException
09-10 14:23:49.592: W/System.err(4922):     at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:548)
09-10 14:23:49.596: W/System.err(4922):     at android.view.View.measure(View.java:15848)
09-10 14:23:49.596: W/System.err(4922):     at com.example.Utils.setListViewHeightBasedOnItems(Utils.java:21)
09-10 14:23:49.596: W/System.err(4922):     at com.example.SliderHome$LoadComments.onPostExecute(SliderHome.java:763)
09-10 14:23:49.596: W/System.err(4922):     at com.example.SliderHome$LoadComments.onPostExecute(SliderHome.java:1)
09-10 14:23:49.596: W/System.err(4922):     at android.os.AsyncTask.finish(AsyncTask.java:631)
09-10 14:23:49.596: W/System.err(4922):     at android.os.AsyncTask.access$600(AsyncTask.java:177)
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/scroll"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_below="@+id/imageView"
    android:scrollbars="none" >

    <RelativeLayout
       android:id="@+id/slider"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:orientation="vertical" >

       <ImageView
          android:id="@+id/imageView"
          android:layout_width="match_parent"
          android:layout_height="170dp"
          android:layout_alignParentLeft="true"
          android:layout_alignParentTop="true"
          android:contentDescription="@string/app_name"
          android:scaleType="fitXY" />

        .............

        <ListView
            android:id="@+id/listView1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="true"
            android:divider="@null"
            android:scrollbars="none"
            android:layout_below="@+id/relativeLayout2"
            android:layout_marginLeft="5dp"
            android:layout_marginRight="5dp"
            android:layout_marginBottom="5dp"
            android:background="#0B1F20" >
        </ListView>
     </RelativeLayout>
</ScrollView>