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

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

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

        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:fillViewport="true">


<LinearLayout
          android:orientation="vertical"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:id="@+id/f_summary_LL">


<LinearLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">

<LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@color/black">


    <LinearLayout
            android:orientation="horizontal"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" android:layout_weight="1">
        <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                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_width="wrap_content"
                android:layout_height="wrap_content"
                android:text=""
                android:id="@+id/BTS1" 
                android:textColor="@color/white"    
                android:paddingLeft="4dp"
                android:textSize="13sp"/>
    </LinearLayout>

    <LinearLayout
            android:orientation="horizontal"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"  
            android:gravity="center_vertical|right"
            android:layout_weight="1">
        <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text=""
                android:id="@+id/textView7"
                android:textSize="13sp"
                android:textColor="@color/white"
                android:textStyle="bold" />
        <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                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_width="fill_parent"
        android:layout_height="wrap_content">


    <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            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_width="0dp"
            android:layout_height="wrap_content"
            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_width="0dp"
            android:layout_height="wrap_content"
            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_width="0dp"
            android:layout_height="wrap_content"
            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_width="0dp"
            android:layout_height="wrap_content"
            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_width="0dp"
            android:layout_height="wrap_content"
            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_width="fill_parent"
        android:layout_height="wrap_content"
        >
    <ListView
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:id="@+id/listView1"/>
</LinearLayout>




<LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@color/black"
        android:baselineAligned="false">


    <LinearLayout
            android:orientation="horizontal"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" android:layout_weight="1"
            android:baselineAligned="false">

        <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                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_width="wrap_content"
                android:layout_height="wrap_content"
                android:text=""
                android:id="@+id/BTS2" android:textSize="13sp" 
                android:textColor="@color/white"
                android:paddingLeft="4dp"/>
    </LinearLayout>


</LinearLayout>

<LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">

    <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            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_width="0dp"
            android:layout_height="wrap_content"
            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_width="0dp"
            android:layout_height="wrap_content"
            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_width="0dp"
            android:layout_height="wrap_content"
            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_width="0dp"
            android:layout_height="wrap_content"
            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_width="0dp"
            android:layout_height="wrap_content"
            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_width="fill_parent"
        android:layout_height="wrap_content">

    <ListView
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:id="@+id/listView2"/>
</LinearLayout>

</LinearLayout>


<LinearLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" android:id="@+id/innings2">

    <LinearLayout
            android:orientation="horizontal"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="@color/black">


        <LinearLayout
                android:orientation="horizontal"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content" android:layout_weight="1">

            <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    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_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text=""
                    android:id="@+id/BTS2" android:textSize="13sp" 
                    android:textColor="@color/white"
                    android:paddingLeft="4dp"/>
        </LinearLayout>

        <LinearLayout
                android:orientation="horizontal"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent" android:layout_weight="1"  
                android:gravity="center_vertical|right">

            <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text=""
                    android:id="@+id/textView7" android:textStyle="bold" 
                    android:textColor="@color/white"
                    android:textSize="13sp"/>
            <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    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_width="fill_parent"
            android:layout_height="wrap_content">


        <TextView
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                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_width="0dp"
                android:layout_height="wrap_content"
                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_width="0dp"
                android:layout_height="wrap_content"
                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_width="0dp"
                android:layout_height="wrap_content"
                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_width="0dp"
                android:layout_height="wrap_content"
                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_width="0dp"
                android:layout_height="wrap_content"
                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_width="fill_parent"
            android:layout_height="wrap_content"
            >
        <ListView
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:id="@+id/listView3"/>
    </LinearLayout>




    <LinearLayout
            android:orientation="horizontal"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="@color/black"
            android:baselineAligned="false">


        <LinearLayout
                android:orientation="horizontal"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content" android:layout_weight="1"
                android:baselineAligned="false">
            <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    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_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text=""
                    android:id="@+id/BoSe1" android:textSize="13sp" 
                    android:textColor="@color/white"
                    android:paddingLeft="4dp"/>
        </LinearLayout>


    </LinearLayout>
    <LinearLayout
            android:orientation="horizontal"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content">


        <TextView
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                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_width="0dp"
                android:layout_height="wrap_content"
                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_width="0dp"
                android:layout_height="wrap_content"
                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_width="0dp"
                android:layout_height="wrap_content"
                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_width="0dp"
                android:layout_height="wrap_content"
                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_width="0dp"
                android:layout_height="wrap_content"
                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_width="fill_parent"
            android:layout_height="wrap_content"
            >
        <ListView
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:id="@+id/listView4"/>
    </LinearLayout>

</LinearLayout>


</LinearLayout>

</ScrollView>

【问题讨论】:

标签: android android-listview android-scrollview


【解决方案1】:

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

不要在 ScrollView 中使用 ListView

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
          android:id="@+id/scrollojt"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:fillViewport="true">
      
          <RelativeLayout
              android:layout_width="match_parent"
              android:layout_height="wrap_content">
      
              <ListView
                  android:id="@+id/listView1"
                  android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:background="#f00"></ListView>
      
              <ListView
                  android:id="@+id/listView2"
                  android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  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://stackoverflow.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_width="match_parent"
            android:layout_height="match_parent">
        
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical">
        
        
                <androidx.cardview.widget.CardView
                    android:id="@+id/cardBrand"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:padding="@dimen/fab_margin"
                    android:layout_below="@+id/cardRange"
                    app:cardElevation="3dp">
        
                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:orientation="vertical">
        
                        <TextView
                            android:id="@+id/brandTitle"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            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_width="match_parent"
                            android:layout_height="match_parent"
                            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_width="match_parent"
                    android:layout_height="6dp" />
        
                <androidx.cardview.widget.CardView
                    android:id="@+id/cardRating"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:padding="@dimen/fab_margin"
                    android:layout_below="@+id/cardBrand"
                    app:cardElevation="3dp">
        
                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:orientation="vertical">
        
                        <TextView
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            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_width="match_parent"
                            android:layout_height="match_parent"
                            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_width="match_parent"
                    android:layout_height="6dp" />
        
            </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 给出的答案只有在我们设置列表项的固定高度时才有效

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-09-28
            • 1970-01-01
            • 2013-09-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多