1. 程式人生 > >Android ScrollView中嵌套ListView

Android ScrollView中嵌套ListView

() 固定 rgb don java and ada ldr androi

由於要做一個相似美團的團購產品。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) {
                // 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);
        }
    }


僅僅要在設置ListView的Adapter後調用此靜態方法就可以讓ListView正確的顯示在其父ListView的ListItem中。

可是要註意的是,子ListView的每一個Item必須是LinearLayout,不能是其它的,由於其它的Layout(如RelativeLayout)沒有重寫onMeasure(),所以會在onMeasure()時拋出異常。

這樣就能夠實現scrollview加listview的 嵌套復雜布局了。


Android ScrollView中嵌套ListView