1. 程式人生 > >android listView多層巢狀listView顯示不全問題

android listView多層巢狀listView顯示不全問題

最近在做專案,需要用到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);
	}

但是這個方法,對於非同步載入,會存在顯示不全問題