Scrollview没有在listview上使用其他视图

时间:2016-10-21 10:28:03

标签: android android-layout

这是我的xml布局文件,其中我使用scrollview作为父级,其中列表视图丢失了它们的滚动属性。请指示我该怎么做..为什么listview默认丢失了它们的滚动属性

   <android.support.v4.widget.NestedScrollView   xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:tools="http://schemas.android.com/tools"
                android:layout_width="match_parent"
                android:fillViewport="true"
                android:layout_height="match_parent">     
                <RelativeLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content">
                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_alignParentRight="true"
                            android:layout_centerHorizontal="true"
                            android:layout_marginRight="10dp"
                            android:text="Edit Order"
                            android:layout_marginTop="5dp"
                            android:id="@+id/txtyourOrder"
                            android:textColor="@android:color/holo_green_dark" />      
                        <TextView
                            android:id="@+id/textView"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:text="Your Order"
                            android:layout_marginLeft="10dp"
                            android:textColor="@android:color/black"
                            android:textSize="20sp" />        
                    <View
                        android:id="@+id/view1"
                        android:layout_below="@id/txtyourOrder"
                        android:layout_width="match_parent"
                        android:layout_height="0.5dp"
                        android:layout_marginTop="10dp"
                        android:background="@android:color/darker_gray" /> 
                    <ListView
                        android:layout_below="@id/view1"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:nestedScrollingEnabled="true"
                        android:layout_marginTop="10dp"
                        android:id="@+id/listview"
                        android:textColor="@android:color/darker_gray" />        
                    <TextView
                        android:layout_below="@id/listview"
                        android:id="@+id/txtAddItems"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:gravity="center_horizontal"
                        android:layout_marginTop="10dp"
                        android:text="Add Items"
                        android:textColor="@android:color/holo_green_dark" />

                 </android.support.v4.widget.NestedScrollView>

请帮助我!

3 个答案:

答案 0 :(得分:1)

根据定义here ..

您不应该将ListView放在ScrollView中,因为ListView类实现了自己的滚动,它只是不接收手势,因为它们都由父ScrollView处理。我强烈建议你以某种方式简化你的布局。例如,您可以将要滚动的视图添加到ListView作为页眉或页脚。

答案 1 :(得分:1)

如果你想使用ListView,只需使用Co-Ordinator布局作为root,并根据它设计你的布局。

你也可以像这样在ListView上添加标题:

LayoutInflater inflater = getLayoutInflater();
ViewGroup headerView = (ViewGroup)inflater.inflate(R.layout.header, 
listview, false);
myListView.addHeaderView(headerView, null, false);

答案 2 :(得分:1)

最短和最短的ScrollView问题中ListView的最简单解决方案。

您不必在layout.xml文件中执行任何特殊操作,也不必处理父ScrollView上的任何内容。您只需处理子ListView。您还可以使用此代码在ScrollView&amp;中使用任何类型的子视图。执行触摸操作。

只需在java类中添加以下代码行:

ListView lv = (ListView) findViewById(R.id.layout_lv);
lv.setOnTouchListener(new OnTouchListener() {
    // Setting on Touch Listener for handling the touch inside ScrollView
    @Override
    public boolean onTouch(View v, MotionEvent event) {
    // Disallow the touch request for parent scroll on touch of child view
    v.getParent().requestDisallowInterceptTouchEvent(true);
    return false;
    }
});

如果将ListView放在ScrollView中,则所有ListView都不会伸展到其全高。以下是解决此问题的方法。

/**** Method for Setting the Height of the ListView dynamically.
 **** Hack to fix the issue of not showing all the items of the ListView
 **** when placed inside a ScrollView  ****/
public static void setListViewHeightBasedOnChildren(ListView listView) {
    ListAdapter listAdapter = listView.getAdapter();
    if (listAdapter == null)
        return;

    int desiredWidth = MeasureSpec.makeMeasureSpec(listView.getWidth(), MeasureSpec.UNSPECIFIED);
    int totalHeight = 0;
    View view = null;
    for (int i = 0; i < listAdapter.getCount(); i++) {
        view = listAdapter.getView(i, view, listView);
        if (i == 0)
            view.setLayoutParams(new ViewGroup.LayoutParams(desiredWidth, LayoutParams.WRAP_CONTENT));

        view.measure(desiredWidth, MeasureSpec.UNSPECIFIED);
        totalHeight += view.getMeasuredHeight();
    }
    ViewGroup.LayoutParams params = listView.getLayoutParams();
    params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
    listView.setLayoutParams(params);
}

要使用此方法,只需在此方法中传递ListView:

ListView list = (ListView) view.findViewById(R.id.ls);
setListViewHeightBasedOnChildren(list);