Android 将高度设置为listview不工作(listview在scrollview内)
我有一个在Scrollview中包含ListView的布局。我使用了下面的代码来设置ListView高度 //Utils.javaAndroid 将高度设置为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
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>