Android 使用ScrollView设置ListView高度

Android 使用ScrollView设置ListView高度,android,listview,android-listview,Android,Listview,Android Listview,我已经创建了列表视图和滚动视图,为此我创建了一个方法来设置列表视图的高度。如下所示-此方法在API22中工作正常,但在API18中工作不正常(在API18中运行时出现空指针异常)。请给我解决方案,谢谢 public static void setListViewHeightBasedOnChildren(ListView listView) { ListAdapter mAdapter = listView.getAdapter(); int total

我已经创建了列表视图和滚动视图,为此我创建了一个方法来设置列表视图的高度。如下所示-此方法在API22中工作正常,但在API18中工作不正常(在API18中运行时出现空指针异常)。请给我解决方案,谢谢

public static void setListViewHeightBasedOnChildren(ListView listView)
    {
        ListAdapter mAdapter = listView.getAdapter();

        int totalHeight = 0;
        System.out.println("Adapter "+mAdapter);

        for (int i = 0; i < mAdapter.getCount(); i++) {
            View mView = mAdapter.getView(i, null, listView);
            System.out.println("M View "+mView);
            mView.measure(
                    View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),

                    View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));

            totalHeight += mView.getMeasuredHeight();
            Log.w("HEIGHT" + i, String.valueOf(totalHeight));

        }

        ViewGroup.LayoutParams params = listView.getLayoutParams();
        params.height = totalHeight
                + (listView.getDividerHeight() * (mAdapter.getCount() - 1));
        listView.setLayoutParams(params);
        listView.requestLayout();
    }
public static void setListViewHeightBasedOnChildren(ListView ListView)
{
ListAdapter mAdapter=listView.getAdapter();
int totalHeight=0;
System.out.println(“适配器”+mAdapter);
对于(int i=0;i
您不应该在ScrollView中放置ListView

请参考以下结果


您不应该在ScrollView中放置ListView

请参考以下结果


无需将listview放入scrollview。默认情况下,listview有scrollview。

无需将listview放入scrollview。默认情况下,listview有scrollview。

我和您一样也有此错误。我的解决方案如下:

1。创建不可滚动的自定义列表视图

public class NonScrollListView extends ListView {

public NonScrollListView(Context context) {
    super(context);
}
public NonScrollListView(Context context, AttributeSet attrs) {
    super(context, attrs);
}
public NonScrollListView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
}
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int heightMeasureSpec_custom = MeasureSpec.makeMeasureSpec(
                Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, heightMeasureSpec_custom);
        ViewGroup.LayoutParams params = getLayoutParams();
        params.height = getMeasuredHeight();    
}
}

2。将上述自定义类用于xml文件

  <com.Example.NonScrollListView
        android:id="@+id/lv_nonscroll_list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </com.Example.NonScrollListView>

对我来说,它在所有操作系统版本上都运行良好。
希望你一切顺利。

我也像你一样犯过这个错误。我的解决方案如下:

1。创建不可滚动的自定义列表视图

public class NonScrollListView extends ListView {

public NonScrollListView(Context context) {
    super(context);
}
public NonScrollListView(Context context, AttributeSet attrs) {
    super(context, attrs);
}
public NonScrollListView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
}
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int heightMeasureSpec_custom = MeasureSpec.makeMeasureSpec(
                Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, heightMeasureSpec_custom);
        ViewGroup.LayoutParams params = getLayoutParams();
        params.height = getMeasuredHeight();    
}
}

2。将上述自定义类用于xml文件

  <com.Example.NonScrollListView
        android:id="@+id/lv_nonscroll_list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </com.Example.NonScrollListView>

对我来说,它在所有操作系统版本上都运行良好。
祝您一切顺利。

如果出现异常,请显示堆栈跟踪。如果出现异常,请显示堆栈跟踪。谢谢Sridhar,但我不想滚动列表视图,我只想使用Scrollview滚动整个页面。我希望我的列表视图像简单的Row一样如果我使用这种方法如果我使用上面的方法我的问题在API 21,22中得到解决,但在API 18中没有得到解决谢谢Sridhar但是,我不想滚动列表视图,我只想使用Scrollview滚动我的整个页面。我希望我的列表视图像简单的行,如果我使用这个方法,如果我使用上面的方法,我的问题会在API21,22中得到解决,而不是在API18中