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- 这太长了......你应该发布层次结构表单大纲视图......! 更新:现在支持库允许使用一位使用 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】:ScrollView
和 ListView
都使用滚动。所以在我看来,它们不应该一起使用。尝试使用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,它的边距变得无效。所以,使用<Space/>
而不是margin
,就像上面的例子一样。
希望对你有帮助!!
【讨论】:
【参考方案6】:我建议使用带有节标题的列表视图...我认为这就是您想要实现的...
这可能会有所帮助 https://learnlinky.com/2016/11/30/listview-section-header-android/
reddy raz 给出的答案只有在我们设置列表项的固定高度时才有效
【讨论】:
以上是关于ScrollView 内的多个 ListView的主要内容,如果未能解决你的问题,请参考以下文章