带有 ListView 的 ScrollView 不滚动 - android [英] ScrollView with a ListView doesn't scroll - android
问题描述
我对以下布局的问题是布局不滚动.我的要求是我必须显示 2 个有时可能很大的列表.所以我把两个 ListViews 放在一个 ScrollView 中,这样我就可以滚动到底部并查看两个 ListViews.我不想让 ListView 滚动
.我只希望我的 ScrollView 表现得像它应该的那样.有什么建议吗??
My problem with the following layout is that the layout doesn't scroll. My requirement is that I have to display 2 lists which at times can be big. So i put both the ListViews inside a ScrollView so that i can scroll to the bottom and have a look at both the ListViews. I don't want the ListView to scroll
. I only want my ScrollView to behave as it should. Any suggestions??
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ScrollView
android:id="@+id/scrollViewContactDetails"
android:layout_width="match_parent"
android:layout_height="fill_parent" android:fillViewport="true">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginTop="5dp"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textSize="22dp" />
<LinearLayout
android:id="@+id/numbersLayout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:orientation="vertical"
android:weightSum="1" >
<LinearLayout
android:id="@+id/numbersLayoutList"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:orientation="vertical"
android:weightSum="1" >
<ListView
android:id="@+id/numbersList"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:layout_gravity="center"
android:dividerHeight="2dp" >
</ListView>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/emailLayout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginTop="10dp"
android:orientation="horizontal"
android:weightSum="1" >
<LinearLayout
android:layout_width="120dp"
android:layout_height="match_parent"
android:layout_gravity="right|center"
android:gravity="top|right"
android:orientation="vertical" >
<TextView
android:id="@+id/emailId"
android:layout_width="120dp"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:gravity="right|center"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="#8d8d8d"
android:textSize="18dp" />
</LinearLayout>
<LinearLayout
android:id="@+id/emailLayoutList"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:layout_marginLeft="20dp"
android:gravity="center"
android:orientation="vertical"
android:weightSum="1" >
<ListView
android:id="@+id/emailList"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:layout_gravity="center"
android:layout_weight="1"
android:dividerHeight="2dp" >
</ListView>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</ScrollView>
</LinearLayout>
推荐答案
我花了几天时间试图弄清楚如何实现这一点,但找不到任何解决方案.你不应该把 ListView 放在 ScrollView 中
是我搜索过的所有地方的普遍说法.我不想使用 LinearLayout 或 ViewGroup,因为我已经使用 ListView 创建了整个 UI,它对我和其他人来说都很棒.除了页面没有滚动之外,它运行良好.
I spent days trying to figure out how to achieve this and couldn't find any solution. You should not put a ListView inside a ScrollView
was the common saying everywhere I searched. I didn't want to use LinearLayout or ViewGroup because I had already created the whole UI using ListView and it looked awesome to me and everyone else. It worked well except that the page didn't scroll.
最近我在这里偶然发现了一个问题,并想尝试一下这个答案.它完美无缺!
Recently I stumbled upon a question here and thought to give this answer a try. It works flawlessly!
解决办法如下:
public class Utility {
public static void setListViewHeightBasedOnChildren(ListView listView) {
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
// pre-condition
return;
}
int totalHeight = 0;
for (int i = 0; i < listAdapter.getCount(); i++) {
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
listView.setLayoutParams(params);
}
}
在将适配器分配给列表视图并完成后,只需调用 Utility.setListViewHeightBasedOnChildren(yourListView)
!
Just call Utility.setListViewHeightBasedOnChildren(yourListView)
after you have assigned the adapter to your listview and you're done!
非常感谢 DougW
提出答案.这是原始链接 如何将 ListView 放入 ScrollView 而不折叠?
A big thanks to DougW
for coming up with the answer. Here is the original link How can I put a ListView into a ScrollView without it collapsing?
这篇关于带有 ListView 的 ScrollView 不滚动 - android的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!