listview 无数据时 会执行getview方法吗

 我来答
蘑菇饭资讯
2014-12-24 · TA获得超过6万个赞
知道大有可为答主
回答量:1.7万
采纳率:90%
帮助的人:1.1亿
展开全部
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()后面,一切正常。
314659476
2014-12-12 · TA获得超过1836个赞
知道大有可为答主
回答量:2162
采纳率:66%
帮助的人:546万
展开全部
不会 是根据getcount判断子view数量
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友9244c21
2014-12-12 · TA获得超过126个赞
知道小有建树答主
回答量:202
采纳率:0%
帮助的人:52.3万
展开全部
不会的,没有数据getCount为0
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式