listview inside a scrollview code example
Example 1: list view in scrollview
//Must use method whenever updating listview data
//Sets listview height to total of all individual views
public static void getListViewSize(ListView myListView) {
ListAdapter myListAdapter = myListView.getAdapter();
if (myListAdapter==null) {
//do nothing return null
return;
}
//set listAdapter in loop for getting final size
int totalHeight = 0;
for (int size = 0; size < myListAdapter.getCount(); size++) {
View listItem = myListAdapter.getView(size, null, myListView);
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
}
//setting listview item in adapter
ViewGroup.LayoutParams params=myListView.getLayoutParams();
params.height=totalHeight + (myListView.getDividerHeight() * (myListAdapter.getCount() - 1));
myListView.setLayoutParams(params);
}
Example 2: list view in scrollview
//This method needs to be run each time the list view data changes
//It sets the height to the height of all the individual views
public static void setListViewHeightBasedOnChildren
(ListView listView) {ListAdapter listAdapter = listView.getAdapter();if (listAdapter == null) return;int desiredWidth = easureSpec.makeMeasureSpec(listView.getWidth(),
MeasureSpec.UNSPECIFIED);int totalHeight = 0;
View view = null;for (int i = 0; i < listAdapter.getCount(); i++) {
view = listAdapter.getView(i, view, listView);if (i == 0) view.setLayoutParams(new
ViewGroup.LayoutParams(desiredWidth,
LayoutParams.WRAP_CONTENT));
view.measure(desiredWidth, MeasureSpec.UNSPECIFIED);
totalHeight += view.getMeasuredHeight();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight + (listView.getDividerHeight() *
(listAdapter.getCount() — 1));
listView.setLayoutParams(params);
listView.requestLayout();
} (ListView listView) {ListAdapter listAdapter = listView.getAdapter();if (listAdapter == null) return;int desiredWidth = easureSpec.makeMeasureSpec(listView.getWidth(), MeasureSpec.UNSPECIFIED);int totalHeight = 0; View view = null;for (int i = 0; i < listAdapter.getCount(); i++) { view = listAdapter.getView(i, view, listView);if (i == 0) view.setLayoutParams(new ViewGroup.LayoutParams(desiredWidth, LayoutParams.WRAP_CONTENT)); view.measure(desiredWidth, MeasureSpec.UNSPECIFIED); totalHeight += view.getMeasuredHeight(); } ViewGroup.LayoutParams params = listView.getLayoutParams(); params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() — 1)); listView.setLayoutParams(params); listView.requestLayout(); }