原因:主要是由于Listview的宽高不确定, 无法确定取多少View来填充ListView,也就是无法确定运行多少次getView()方法。所以设计布局的时候尽量把listview固定长宽来提高性能。遇到复杂的布局时,可以选择动态测量listview 的高度。
listView_explorer_content.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
LayoutParams lp;
lp = listView_explorer_content.getLayoutParams();
lp.width = listView_explorer_content.getWidth();
lp.height = listView_explorer_content.getHeight();
if (listView_explorer_content.getHeight() > 0) {
listView_explorer_content.setLayoutParams(lp);
}
listView_explorer_content.getViewTreeObserver().removeOnGlobalLayoutListener(this);//移除OnGlobalLayoutListener,不然会重复调用。
}
}
});