ScrollView with a ListView doesn't scroll - android
Solution 1
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!
Here's the solution:
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);
}
}
Just call Utility.setListViewHeightBasedOnChildren(yourListView)
after you have assigned the adapter to your listview and you're done!
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?
Solution 2
You shouldn't put listview in to scrollview, it's not a good idea. If you don't want it to scroll, maybe you shouldn't use listviews. Have you tried with LinearLayouts?
Solution 3
Before calling the below method,
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);
}
You must remove the property 'android:fillViewport="true" from scrollview. If not, scrolling not works.
Solution 4
Instead of putting two listview you can use one listview and you can add both data or inflate both xml file in the adapter of that listview. This will show both data in one listview and scroll the data with one scroll bar.
Related videos on Youtube

Vikram Gupta
Technology attracts me; I'm a tech freak and a pretty nice coder as well. I love building Android apps. Soccer is an integral part of my life; something I can't live without. I also take pleasure in biking and outdoor activities to keep myself fit, and photography. I love cooking and I'm pretty good at that too! Connect with me on: LinkedIn - https://www.linkedin.com/in/vikramgupta20 Twitter - @vikram_gupta
Updated on June 23, 2022Comments
-
Vikram Gupta over 1 year
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>
-
Bhavinkumar Patel almost 8 yearsThank you very much u saved my day