相信大家都知道在Scrollview使用ListView的話會導(dǎo)致ListView的大小不符合設(shè)定的要求戚绕,一個方法是重寫ListView的onMeasure
方法晾腔,但是這樣的后果是當(dāng)ScrollView滾動的時候?qū)е耡dapter的getView方法被反復(fù)地調(diào)用驶兜。
這里說一個更好地方法
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.requestLayout();
}
這里通過調(diào)用了一遍adapter的getView
方法吞鸭,把整個ListView
的高度都計算好以后再手動設(shè)置它的高度,這樣就getView
被調(diào)用的次數(shù)明顯減少了菊值。