android中scroll中的listview高度重新计算
2016-07-28 15:16
585 查看
大家都知道在ScrolleView中使用ListView需要计算listview每个item的高度,不然的话,listview只会显示一个item。所以我在初始化的时候调用了下面的方法计算了listView item 的高度:
// 获取ListView对应的Adapter
ListAdapter homeAdapter = listView.getAdapter();
if (homeAdapter == null) {
return;
}
int totalHeight = 0;
for (int i = 0, len = homeAdapter.getCount(); i < len; i++) {
// listAdapter.getCount()返回数据项的数目
View listItem = homeAdapter.getView(i, null, listView);
// 计算子项View 的宽高
listItem.measure(0, 0);
int childHeight = listItem.getMeasuredHeight();
// 统计所有子项的总高度
totalHeight += childHeight;
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight + (listView.getDividerHeight() * (homeAdapter.getCount() - 1));
// listView.getDividerHeight()获取子项间分隔符占用的高度
// params.height最后得到整个ListView完整显示需要的高度
listView.setLayoutParams(params);
在我没有用数据调试的时候没有任何问题。当从服务器拿到数据,然后通知adapter.notifyDataSetChanged();的时候,问题出现了,adapter的getCount()调用,而getView()怎么都不调用,瞎折腾了两小时之后,豁然开朗,原来计算listview中item的高度需要在调用了adapter.notifyDataSetChanged();这个之后去计算,之前没有数据listView根本不知道自己有多少item。
将计算listview高度的代码挪到adapter.notifyDataSetChanged()后面,一切正常。
ListView 跟ScroolView 共存 listItem.measure(0, 0) 空指针
我每次调用的时候都会产生在listItem.measure(0,0)报空指针异常。我debug 发现listItem 并不是为空啊,为啥会报错。在经过一番查找之后。我发现原来是自己item的布局用了RelativeLayout 把他换为LinearLayout 就好了。究其原因,原来是 Linearlayout重写了onmeasure方法,其他的布局文件没有重写onmeasure,所以在调用listItem.measure(0, 0); 会报空指针异常,如果想用这个东东,就必须用linearlayout布局喽。
// 获取ListView对应的Adapter
ListAdapter homeAdapter = listView.getAdapter();
if (homeAdapter == null) {
return;
}
int totalHeight = 0;
for (int i = 0, len = homeAdapter.getCount(); i < len; i++) {
// listAdapter.getCount()返回数据项的数目
View listItem = homeAdapter.getView(i, null, listView);
// 计算子项View 的宽高
listItem.measure(0, 0);
int childHeight = listItem.getMeasuredHeight();
// 统计所有子项的总高度
totalHeight += childHeight;
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight + (listView.getDividerHeight() * (homeAdapter.getCount() - 1));
// listView.getDividerHeight()获取子项间分隔符占用的高度
// params.height最后得到整个ListView完整显示需要的高度
listView.setLayoutParams(params);
在我没有用数据调试的时候没有任何问题。当从服务器拿到数据,然后通知adapter.notifyDataSetChanged();的时候,问题出现了,adapter的getCount()调用,而getView()怎么都不调用,瞎折腾了两小时之后,豁然开朗,原来计算listview中item的高度需要在调用了adapter.notifyDataSetChanged();这个之后去计算,之前没有数据listView根本不知道自己有多少item。
将计算listview高度的代码挪到adapter.notifyDataSetChanged()后面,一切正常。
ListView 跟ScroolView 共存 listItem.measure(0, 0) 空指针
我每次调用的时候都会产生在listItem.measure(0,0)报空指针异常。我debug 发现listItem 并不是为空啊,为啥会报错。在经过一番查找之后。我发现原来是自己item的布局用了RelativeLayout 把他换为LinearLayout 就好了。究其原因,原来是 Linearlayout重写了onmeasure方法,其他的布局文件没有重写onmeasure,所以在调用listItem.measure(0, 0); 会报空指针异常,如果想用这个东东,就必须用linearlayout布局喽。
相关文章推荐
- Android样式的开发:Style篇
- Android应用开发之所有动画使用详解
- Android开发笔记(三)可以改变的字符串SpannableString
- Android测试内存泄露的注重点
- Android Studio 错误 Duplicate files copied in APK META-INF/LICENSE.txt
- Android开发之经典游戏贪吃蛇
- android5.0按钮点击水波纹效果
- Android View的坐标系及其相应获取位置信息的方法
- Android跨线程、进程通信(IPC),主线程与子线程通信
- Android集成友盟推送
- Android4.4 WebAPI实现拍照上传功能
- 【Android】Merge讲解与实例
- 炫酷的circleprogress
- Android Service的生命周期
- android 对gif图片的简单使用记录
- android recycleView局部刷新的选择
- Android 图片加载方式
- Android AndFix 热修复 使用
- Android Service 生命周期和使用注意项
- Android 调用系统相机处理大图片问题