使用Xlistview时TextView自动换行或ScrollView嵌套Listview高度显示不全

来源:互联网 发布:mac安装win7无法启动 编辑:程序博客网 时间:2024/05/19 14:55

使用Xlistview时TextView自动换行或ScrollView嵌套Listview高度显示不全

在最近的项目中用到ScrollView嵌套Listview。这样高度会显示不全。其实网上很多这个解决办法,只需在listview.setAdapter(adapter);后面添加一段代码


/* 动态设置ListView的高度
* @param listView
*/
public static void setListViewHeightBasedOnChildren(ListView listView) {
if (listView == null) return;
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
// pre-condition
return;
}
int totalHeight = 0;
for (int i = 0, count = listAdapter.getCount(); i < count; i++) {
View listItem = listAdapter.getView(i, null, listView);
////计算子项View 的宽高
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight() + listView.getDividerHeight();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight;
listView.setLayoutParams(params);
}
注意必须实在listview.setAdapter(adapter);才生效。
之后又出现一个问题,产品要求ListView中的Textview需要适应自动换行。尝试了很多办法,先写一下最简单的一种。只需重写@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}

重写onMeasure后,listview在加载数据是getview()方法会频繁执行,慎用。
之后有一个布局需要用到下拉刷新和上拉加载,于是我就又使用了之前修改后的Xlistview。问题出现了,在加载数据时Xlistview只显示一部分,准确的说只显示一页,不能滚动。难道重写onMeasure()发那个发还会有影响吗?
于是我将onMeasure注释掉发现数据完全加载了,
我打印发现int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
expandSpec和heightMeasureSpec是不一样的。一脸懵逼中,希望真正懂得人,留言说一下为什么不一样。

阅读全文
0 0
原创粉丝点击