因为要做一个类似美团的团购产品,scrollview中还有嵌入listview,要是直接把listview嵌进scrollview中,listview的高度是固定的不能进行滑动。默认情况下Android是禁止在ScrollView中放入另外的ScrollView的,它的高度是无法计算的。这就导致里面的listview高度不能确定,所以只能在程序中动态设置代码如下:
- public class Utility {
- public static void setListViewHeightBasedOnChildren(ListView listView) {
- ListAdapter listAdapter = listView.getAdapter();
- if (listAdapter == null) {
-
- 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);
- }
- }
只要在设置ListView的Adapter后调用此静态方法即可让ListView正确的显示在其父ListView的ListItem中。
但是要注意的是,子ListView的每个Item必须是LinearLayout,不能是其他的,因为其他的Layout(如RelativeLayout)没有重写onMeasure(),所以会在onMeasure()时抛出异常。
这样就可以实现scrollview加listview的 嵌套复杂布局了。