android listView多層巢狀listView顯示不全問題
阿新 • • 發佈:2018-12-30
最近在做專案,需要用到listVIew多層巢狀listVIew的需求,先發現已下兩個處理辦法比較好用
第一種:
public class ListViewNesting extends ListView { public ListViewNesting(Context context) { super(context); } public ListViewNesting(Context context, AttributeSet attrs) { super(context, attrs); } public ListViewNesting(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); } }
這個可以很好的解決巢狀時listView顯示不全問題,以及子listView中含有非同步載入的資料(比如網路圖片、網路資料)等時,依然可以完整顯示非同步重新整理
第二種:<span style="font-family: Arial, Helvetica, sans-serif;">重新計算Listview的高度</span><pre name="code" class="java"> 在一個滑動佈局中新增一個滑動控制元件,滑動控制元件的高度因為不能計算,所以只能顯示一個Item,若要解決這個問題,我們可以重新計算Listview的高度,呼叫下面的靜態方法即可。在setAdapter後呼叫此方法 /** * scrollview巢狀listview顯示不全解決 * * @param listView */ 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); }
但是這個方法,對於非同步載入,會存在顯示不全問題