listview 无数据时 会执行getview方法吗
展开全部
1,我的ListView是放在一个ScrollView中的,listView中加了一个HeaderView(头布局)。大家都知道在ScrolleView中使用ListView需要计算listview每个item的高度,不然的话,listview只会显示一个item。所以我在初始化的时候调用了下面的方法计算了listView item 的高度:
public void setListViewHeightBasedOnChildren(ListView listView) {
// 获取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。
将etListViewHeightBasedOnChildren(mListView)挪到adapter.notifyDataSetChanged()后面,一切正常。
public void setListViewHeightBasedOnChildren(ListView listView) {
// 获取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。
将etListViewHeightBasedOnChildren(mListView)挪到adapter.notifyDataSetChanged()后面,一切正常。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询