ScrollView 内的多个 ListView

Posted

技术标签:

【中文标题】ScrollView 内的多个 ListView【英文标题】:Multiple ListViews inside a ScrollView 【发布时间】:2013-05-07 02:56:31 【问题描述】:

我有一个复杂的 xml 文件,我真的需要一个 ScrollView。请不要介意 ID,因为我已经更改了它们。这里的 ScrollView 不起作用。

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"

        android:layout_
        android:layout_
        android:fillViewport="true">


<LinearLayout
          android:orientation="vertical"
          android:layout_
          android:layout_
          android:id="@+id/f_summary_LL">


<LinearLayout
        android:orientation="vertical"
        android:layout_
        android:layout_>

<LinearLayout
        android:orientation="horizontal"
        android:layout_
        android:layout_
        android:background="@color/black">


    <LinearLayout
            android:orientation="horizontal"
            android:layout_
            android:layout_ android:layout_weight="1">
        <TextView
                android:layout_
                android:layout_
                android:text=""
                android:id="@+id/BT1" 
                android:textColor="@color/white"
                android:textStyle="bold"         
                android:gravity="center_vertical|left" 
                android:paddingLeft="2dp" 
                android:textSize="13sp"/>

        <TextView
                android:layout_
                android:layout_
                android:text=""
                android:id="@+id/BTS1" 
                android:textColor="@color/white"    
                android:paddingLeft="4dp"
                android:textSize="13sp"/>
    </LinearLayout>

    <LinearLayout
            android:orientation="horizontal"
            android:layout_
            android:layout_  
            android:gravity="center_vertical|right"
            android:layout_weight="1">
        <TextView
                android:layout_
                android:layout_
                android:text=""
                android:id="@+id/textView7"
                android:textSize="13sp"
                android:textColor="@color/white"
                android:textStyle="bold" />
        <TextView
                android:layout_
                android:layout_
                android:text=""
                android:id="@+id/BT1CRR" android:textColor="@color/white" 
                android:paddingRight="8dp" android:textSize="13sp"
                android:paddingLeft="2dp"/>
    </LinearLayout>


</LinearLayout>

<LinearLayout
        android:orientation="horizontal"
        android:layout_
        android:layout_>


    <TextView
            android:layout_
            android:layout_
            android:text=""
            android:id="@+id/textView" android:textColor="@color/white"
            android:layout_weight="3" android:gravity="center"
            android:background="@drawable/table_header_cell_first" 
            android:textStyle="bold"
            android:textSize="13sp"/>
    <TextView
            android:layout_
            android:layout_
            android:text="R"
            android:id="@+id/textView1" android:textColor="@color/white" 
            android:gravity="center" android:background="@drawable/table_header_cell"
            android:textSize="13sp" android:textStyle="bold" android:layout_weight="1"
            />
    <TextView
            android:layout_
            android:layout_
            android:text="B"
            android:id="@+id/textView2" android:textColor="@color/white" 
            android:gravity="center" android:background="@drawable/table_header_cell"
            android:textStyle="bold" android:textSize="13sp"
            android:layout_weight="1"/>
    <TextView
            android:layout_
            android:layout_
            android:text="4s"
            android:id="@+id/textView3" android:textColor="@color/white" 
            android:gravity="center" android:background="@drawable/table_header_cell"
            android:textSize="13sp" android:textStyle="bold"
            android:layout_weight="1"/>
    <TextView
            android:layout_
            android:layout_
            android:text="6s"
            android:id="@+id/textView4" android:textColor="@color/white" 
            android:layout_weight="1"
            android:gravity="center" android:background="@drawable/table_header_cell"
            android:textSize="13sp" android:textStyle="bold"/>
    <TextView
            android:layout_
            android:layout_
            android:text="SR"
            android:id="@+id/textView5" android:textColor="@color/white" 
            android:layout_weight="1"
            android:gravity="center" android:background="@drawable/table_header_cell"
            android:textSize="13sp" android:textStyle="bold"/>

</LinearLayout>


<LinearLayout
        android:orientation="vertical"
        android:layout_
        android:layout_
        >
    <ListView
            android:layout_
            android:layout_
            android:id="@+id/listView1"/>
</LinearLayout>




<LinearLayout
        android:orientation="horizontal"
        android:layout_
        android:layout_
        android:background="@color/black"
        android:baselineAligned="false">


    <LinearLayout
            android:orientation="horizontal"
            android:layout_
            android:layout_ android:layout_weight="1"
            android:baselineAligned="false">

        <TextView
                android:layout_
                android:layout_
                android:text=""
                android:id="@+id/BT2" android:textStyle="bold" 
                android:textColor="@color/white"
                android:gravity="center_vertical|left" android:paddingLeft="2dp" 
                android:textSize="13sp"/>

        <TextView
                android:layout_
                android:layout_
                android:text=""
                android:id="@+id/BTS2" android:textSize="13sp" 
                android:textColor="@color/white"
                android:paddingLeft="4dp"/>
    </LinearLayout>


</LinearLayout>

<LinearLayout
        android:orientation="horizontal"
        android:layout_
        android:layout_>

    <TextView
            android:layout_
            android:layout_
            android:text=""
            android:id="@+id/textViewBH" android:textColor="@color/white"
            android:layout_weight="3" android:gravity="center"
            android:background="@drawable/table_header_cell_first" 
            android:textSize="13sp"
            android:textStyle="bold"/>

    <TextView
            android:layout_
            android:layout_
            android:text="O"
            android:id="@+id/textViewBOH" android:textColor="@color/white" 
            android:layout_weight="1"
            android:gravity="center" android:background="@drawable/table_header_cell"
            android:textSize="13sp" android:textStyle="bold" android:clickable="false"
            />
    <TextView
            android:layout_
            android:layout_
            android:text="M"
            android:id="@+id/textViewBMH" android:textColor="@color/white" 
            android:layout_weight="1"
            android:gravity="center" android:background="@drawable/table_header_cell"
            android:textStyle="bold" android:textSize="13sp"/>
    <TextView
            android:layout_
            android:layout_
            android:text="R"
            android:id="@+id/textViewBRH" android:textColor="@color/white" 
            android:layout_weight="1"
            android:gravity="center" android:background="@drawable/table_header_cell"
            android:textSize="13sp" android:textStyle="bold"/>
    <TextView
            android:layout_
            android:layout_
            android:text="W"
            android:id="@+id/textViewBWH" android:textColor="@color/white" 
            android:layout_weight="1"
            android:gravity="center" android:background="@drawable/table_header_cell"
            android:textSize="13sp" android:textStyle="bold"/>
    <TextView
            android:layout_
            android:layout_
            android:text=""
            android:id="@+id/textViewBECOH" android:textColor="@color/white" 
            android:layout_weight="1"
            android:gravity="center" android:background="@drawable/table_header_cell"
            android:textSize="13sp" android:textStyle="bold"/>

</LinearLayout>


<LinearLayout
        android:orientation="vertical"
        android:layout_
        android:layout_>

    <ListView
            android:layout_
            android:layout_
            android:id="@+id/listView2"/>
</LinearLayout>

</LinearLayout>


<LinearLayout
        android:orientation="vertical"
        android:layout_
        android:layout_ android:id="@+id/innings2">

    <LinearLayout
            android:orientation="horizontal"
            android:layout_
            android:layout_
            android:background="@color/black">


        <LinearLayout
                android:orientation="horizontal"
                android:layout_
                android:layout_ android:layout_weight="1">

            <TextView
                    android:layout_
                    android:layout_
                    android:text=""
                    android:id="@+id/BT2" android:textStyle="bold" 
                    android:textColor="@color/white"
                    android:gravity="center_vertical|left" android:paddingLeft="2dp" 
                    android:textSize="13sp"/>

            <TextView
                    android:layout_
                    android:layout_
                    android:text=""
                    android:id="@+id/BTS2" android:textSize="13sp" 
                    android:textColor="@color/white"
                    android:paddingLeft="4dp"/>
        </LinearLayout>

        <LinearLayout
                android:orientation="horizontal"
                android:layout_
                android:layout_ android:layout_weight="1"  
                android:gravity="center_vertical|right">

            <TextView
                    android:layout_
                    android:layout_
                    android:text=""
                    android:id="@+id/textView7" android:textStyle="bold" 
                    android:textColor="@color/white"
                    android:textSize="13sp"/>
            <TextView
                    android:layout_
                    android:layout_
                    android:text="0.00"
                    android:id="@+id/Bae2C" android:textColor="@color/white" 
                    android:paddingLeft="2dp"
                    android:paddingRight="8dp" android:textSize="13sp"/>
        </LinearLayout>


    </LinearLayout>
    <LinearLayout
            android:orientation="horizontal"
            android:layout_
            android:layout_>


        <TextView
                android:layout_
                android:layout_
                android:text=""
                android:id="@+id/textView" android:textColor="@color/white"
                android:layout_weight="3" android:gravity="center"
                android:background="@drawable/table_header_cell_first" 
                android:textSize="13sp"
                android:textStyle="bold"/>
        <TextView
                android:layout_
                android:layout_
                android:text="R"
                android:id="@+id/textView9" android:textColor="@color/white" 
                android:layout_weight="1"
                android:gravity="center" 
                android:background="@drawable/table_header_cell"
                android:textSize="13sp" android:textStyle="bold" 
                android:clickable="false"
                />
        <TextView
                android:layout_
                android:layout_
                android:text=""
                android:id="@+id/textView10" android:textColor="@color/white" 
                android:layout_weight="1"
                android:gravity="center" 
                android:background="@drawable/table_header_cell"
                android:textStyle="bold" android:textSize="13sp"/>
        <TextView
                android:layout_
                android:layout_
                android:text=""
                android:id="@+id/textView11" android:textColor="@color/white" 
                android:layout_weight="1"
                android:gravity="center" 
                android:background="@drawable/table_header_cell"
                android:textSize="13sp" android:textStyle="bold"/>
        <TextView
                android:layout_
                android:layout_
                android:text=""
                android:id="@+id/textView4" android:textColor="@color/white" 
                android:layout_weight="1"
                android:gravity="center" 
                android:background="@drawable/table_header_cell"
                android:textSize="13sp" android:textStyle="bold"/>
        <TextView
                android:layout_
                android:layout_
                android:text=""
                android:id="@+id/textView5" android:textColor="@color/white" 
                android:layout_weight="1"
                android:gravity="center" 
                android:background="@drawable/table_header_cell"
                android:textSize="13sp" android:textStyle="bold"/>

    </LinearLayout>


    <LinearLayout
            android:orientation="vertical"
            android:layout_
            android:layout_
            >
        <ListView
                android:layout_
                android:layout_
                android:id="@+id/listView3"/>
    </LinearLayout>




    <LinearLayout
            android:orientation="horizontal"
            android:layout_
            android:layout_
            android:background="@color/black"
            android:baselineAligned="false">


        <LinearLayout
                android:orientation="horizontal"
                android:layout_
                android:layout_ android:layout_weight="1"
                android:baselineAligned="false">
            <TextView
                    android:layout_
                    android:layout_
                    android:text=""
                    android:id="@+id/Bw1" android:textStyle="bold" 
                    android:textColor="@color/white"
                    android:gravity="center_vertical|left" android:paddingLeft="2dp" 
                    android:textSize="13sp"/>
            <TextView
                    android:layout_
                    android:layout_
                    android:text=""
                    android:id="@+id/BoSe1" android:textSize="13sp" 
                    android:textColor="@color/white"
                    android:paddingLeft="4dp"/>
        </LinearLayout>


    </LinearLayout>
    <LinearLayout
            android:orientation="horizontal"
            android:layout_
            android:layout_>


        <TextView
                android:layout_
                android:layout_
                android:text=""
                android:id="@+id/textViewBH" android:textColor="@color/white"
                android:layout_weight="3" android:gravity="center"
                android:background="@drawable/table_header_cell_first" 
                android:textSize="13sp"
                android:textStyle="bold"/>
        <TextView
                android:layout_
                android:layout_
                android:text=""
                android:id="@+id/textViewBOH" android:textColor="@color/white" 
                android:layout_weight="1"
                android:gravity="center" 
                android:background="@drawable/table_header_cell"
                android:textSize="13sp" android:textStyle="bold" 
                android:clickable="false"
                />
        <TextView
                android:layout_
                android:layout_
                android:text=""
                android:id="@+id/textViewBMH" android:textColor="@color/white" 
                android:layout_weight="1"
                android:gravity="center" 
                android:background="@drawable/table_header_cell"
                android:textStyle="bold" android:textSize="13sp"/>
        <TextView
                android:layout_
                android:layout_
                android:text=""
                android:id="@+id/textViewBRH" android:textColor="@color/white" 
                android:layout_weight="1"
                android:gravity="center" 
                android:background="@drawable/table_header_cell"
                android:textSize="13sp" android:textStyle="bold"/>
        <TextView
                android:layout_
                android:layout_
                android:text=""
                android:id="@+id/textViewBWsH" android:textColor="@color/white"  
                android:layout_weight="1"               
                android:gravity="center" 
                android:background="@drawable/table_header_cell"
                android:textSize="13sp" android:textStyle="bold"/>
        <TextView
                android:layout_
                android:layout_
                android:text=""
                android:id="@+id/textViewBECOH" android:textColor="@color/white" 
                android:layout_weight="1"
                android:gravity="center" 
                android:background="@drawable/table_header_cell"
                android:textSize="13sp" android:textStyle="bold"/>

    </LinearLayout>


    <LinearLayout
            android:orientation="vertical"
            android:layout_
            android:layout_
            >
        <ListView
                android:layout_
                android:layout_
                android:id="@+id/listView4"/>
    </LinearLayout>

</LinearLayout>


</LinearLayout>

</ScrollView>

【问题讨论】:

不滚动的Android ListView? ***.com/q/3192595/1012284 滚动多个 ListViews for Android ***.com/q/306626/1012284 你可以看到这个帖子:***.com/questions/16331545/… @Ahmad Ali Nasir- 这太长了......你应该发布层次结构表单大纲视图......! 更新:现在支持库允许使用 使其更容易。 NestedScrollView 可以包含任何布局,其中包含多个简单或回收器视图 【参考方案1】:

一位使用 Android 的 Google 员工的回答:

不要在 ScrollView 中使用 ListView

https://plus.google.com/107708120842840792570/posts/T5AgJ7jiK88

【讨论】:

【参考方案2】:

可以做到,虽然你不应该将列表视图放在滚动视图中,但有时这是更简单的方法:https://***.com/a/3495908/1117338

【讨论】:

【参考方案3】:

像这样使用:像魅力一样工作

删除线性布局。使用相对布局并在其中放置两个列表视图,如下所示。

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/scrollojt"
    android:layout_
    android:layout_
    android:fillViewport="true">

    <RelativeLayout
        android:layout_
        android:layout_>

        <ListView
            android:id="@+id/listView1"
            android:layout_
            android:layout_
            android:background="#f00"></ListView>

        <ListView
            android:id="@+id/listView2"
            android:layout_
            android:layout_
            android:layout_below="@+id/listView1"
            android:background="#0f0"></ListView>
    </RelativeLayout>
</ScrollView>

添加 Utility.java

public class Utility 

    public static void setListViewHeightBasedOnChildren(ListView listView) 
        ListAdapter listAdapter = listView.getAdapter();
        if (listAdapter == null) 
            // pre-condition
            return;
        

        int totalHeight = 0;
        int desiredWidth = MeasureSpec.makeMeasureSpec(listView.getWidth(), MeasureSpec.AT_MOST);
        for (int i = 0; i < listAdapter.getCount(); i++) 
            View listItem = listAdapter.getView(i, null, listView);
            listItem.measure(desiredWidth, MeasureSpec.UNSPECIFIED);
            totalHeight += listItem.getMeasuredHeight();
        

        ViewGroup.LayoutParams params = listView.getLayoutParams();
        params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
        listView.setLayoutParams(params);
        listView.requestLayout();
    

在您的活动中:

lv1.setAdapter(adapter);
lv2.setAdapter(adapter);

Utility.setListViewHeightBasedOnChildren(lv1);
Utility.setListViewHeightBasedOnChildren(lv2);

感谢#Nirmal 的实际回答https://***.com/a/17693628/1403112

【讨论】:

【参考方案4】:

ScrollViewListView 都使用滚动。所以在我看来,它们不应该一起使用。尝试使用RelativeLayout 或其他布局而不是ScrollView

【讨论】:

我知道 ScrollView 和 ListView 不应该一起使用,但我必须这样做。原因是如果我不这样做,则 ListViews 滚动处于活动状态,而不是完整的视图。【参考方案5】:

您可以通过在父布局中包含 ListView 来设置它,如下面的示例 -

<?xml version="1.0" encoding="utf-8"?>
<androidx.core.widget.NestedScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_
    android:layout_>

    <LinearLayout
        android:layout_
        android:layout_
        android:orientation="vertical">


        <androidx.cardview.widget.CardView
            android:id="@+id/cardBrand"
            android:layout_
            android:layout_
            android:padding="@dimen/fab_margin"
            android:layout_below="@+id/cardRange"
            app:cardElevation="3dp">

            <LinearLayout
                android:layout_
                android:layout_
                android:orientation="vertical">

                <TextView
                    android:id="@+id/brandTitle"
                    android:layout_
                    android:layout_
                    android:text="Brands"
                    android:layout_marginTop="@dimen/fab_margin"
                    android:layout_marginLeft="@dimen/fab_margin"
                    android:layout_marginRight="@dimen/fab_margin"
                    android:textAppearance="@style/TextAppearance.AppCompat.Small"
                    android:textColor="@color/md_black_1000"/>

                <ListView
                    android:id="@+id/brandList"
                    android:layout_
                    android:layout_
                    android:layout_marginTop="8dp"
                    android:layout_marginLeft="8dp"
                    android:layout_marginRight="8dp"
                    android:layout_marginBottom="@dimen/fab_margin" />

            </LinearLayout>

        </androidx.cardview.widget.CardView>

        <Space
            android:layout_
            android:layout_ />

        <androidx.cardview.widget.CardView
            android:id="@+id/cardRating"
            android:layout_
            android:layout_
            android:padding="@dimen/fab_margin"
            android:layout_below="@+id/cardBrand"
            app:cardElevation="3dp">

            <LinearLayout
                android:layout_
                android:layout_
                android:orientation="vertical">

                <TextView
                    android:layout_
                    android:layout_
                    android:text="Ratings"
                    android:layout_marginTop="@dimen/fab_margin"
                    android:layout_marginLeft="@dimen/fab_margin"
                    android:layout_marginRight="@dimen/fab_margin"
                    android:textAppearance="@style/TextAppearance.AppCompat.Small"
                    android:textColor="@color/md_black_1000"/>

                <ListView
                    android:id="@+id/ratingList"
                    android:layout_
                    android:layout_
                    android:layout_marginTop="8dp"
                    android:layout_marginLeft="8dp"
                    android:layout_marginRight="8dp"
                    android:layout_marginBottom="@dimen/fab_margin" />

            </LinearLayout>

        </androidx.cardview.widget.CardView>

        <Space
            android:layout_
            android:layout_ />

    </LinearLayout>

</androidx.core.widget.NestedScrollView>

并且,在列表视图被填充之后 -

eachitemSize = 180;

cardBrand.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, eachitemSize * brandsAdapter.getCount()));

cardRating.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, eachitemSize * ratingAdapter.getCount()));

我们在上面所做的是,我们将 ScrollView 的高度设置为match_parent。在填充 ListView 之后,我们将 ListView 的每个父布局定义为其 ListView 项目计数。并且,请记住根据您的每个单元格大小更改 eachitemSize 的值。

另一件需要关心的事情是,在分配 LayoutParams 后,由于新的 LayoutParams,它的边距变得无效。所以,使用&lt;Space/&gt; 而不是margin,就像上面的例子一样。

希望对你有帮助!!

【讨论】:

【参考方案6】:

我建议使用带有节标题的列表视图...我认为这就是您想要实现的...

这可能会有所帮助 https://learnlinky.com/2016/11/30/listview-section-header-android/

reddy raz 给出的答案只有在我们设置列表项的固定高度时才有效

【讨论】:

以上是关于ScrollView 内的多个 ListView的主要内容,如果未能解决你的问题,请参考以下文章

ScrollView 内的多个 ListView

多个ListViews在android中以编程方式创建

我想在滚动时显示这个列表视图

ScrollView 允许拖动内容。这怎么能被禁用?

ScrollView 内不可滚动的 ListView

如何禁用 ScrollView 项目上的多个按钮颜色选择?