最近在做项目的时候遇到一个问题,就是ListView中需要显示另一个动态的list数据,就相当于listView中还有个listView但是 第二个listView不会滑动,有多少数据就显示多少数据,开始 百度找了很多,有人 建议重写listView,可以实现 我没有试,感觉麻烦。 现在只需要一个方法在setAdapter之后调用 就可以完美解决。
需要注意的是:listView中的Item最外层,必须是线性布局(LinearLayout)。其原理是重新计算每个item的高度然后进行重新渲染。所以要确定layoutParam类型。
/**
* listIView嵌套listView 显示不全时调用
* @param listView
*/
public 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);
}