閱讀882 返回首頁    go 阿裏雲 go 技術社區[雲棲]


解決ListView嵌套ListView遇到的問題

Listview嵌套會造成的問題主要是子listview的高度錯誤導致內容不能正常顯示完,解決這個問題,我個人第一個想法就是重新計算子listview的高度,代碼如下:

private void setListViewHeightBasedOnChildren(ListView listView) { 
    if(listView == null) return;

    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中getview方法調用

RelationAdapter relationAdapter = new RelationAdapter(context, model.relations);cell.xlistView.setAdapter(relationAdapter);setListViewHeightBasedOnChildren(cell.xlistView);

注意事項:

Adapter中getView方法返回的View的必須由LinearLayout組成,因為隻有LinearLayout才有measure()方法,如果使用其他的布局如RelativeLayout,在調用listItem.measure(0, 0);時就會拋異常。

效果圖:

最後更新:2017-04-03 07:57:00

  上一篇:go Picasso and Android-Universal-Image-Loader緩存框架
  下一篇:go 程序員加班到深夜,你經曆過沒?