解决把listview放在ScrollView只显示一行的问题

2019-07-08 16:20:27 浏览数 (1)

这种问题是需要重新去计算  listview的条数,不管你是一次性加载,很多可以分页加载  

这里只贴上关键的代码:

代码语言:javascript复制
<strong><span style="font-size:18px;">	/**
	 * 重新测量listview的高度  解决把listview放在ScrollView只显示一行的问题
	 * @param listView
	 */
	protected void setListViewHeightBasedOnChildren(ListView listView) {
		// TODO Auto-generated method stub
	       // 获取ListView对应的Adapter   
		WzCommentAdapter listAdapter = (WzCommentAdapter) listView.getAdapter();   
        if (listAdapter == null) {
            return;   
        }   
   
        int totalHeight = 0;   
        for (int i = 0, len = listAdapter.getCount(); i < len; i  ) {   
            // listAdapter.getCount()返回数据项的数目   
            View listItem = listAdapter.getView(i, null, listView);   
            // 计算子项View 的宽高   
            listItem.measure(0, 0);    
            // 统计所有子项的总高度   
            totalHeight  = listItem.getMeasuredHeight();    
        }   
   
        ViewGroup.LayoutParams params = listView.getLayoutParams();   
        params.height = totalHeight  (listView.getDividerHeight() * (listAdapter.getCount() - 1));   
        // 上面方法参数的意义
        // listView.getDividerHeight()获取子项间分隔符占用的高度   
        // params.height最后得到整个ListView完整显示需要的高度   
        listView.setLayoutParams(params); 
	}</span></strong>

在用到的时候加上这样代码就行:

cList.addAll(caList); cListAdapter.BindData(cList); replyList.setAdapter(cListAdapter); //接下来需要重新计算listview的宽高,因为当前的listView是嵌套在scrollviewL里面 setListViewHeightBasedOnChildren(replyList); cListAdapter.notifyDataSetChanged();

0 人点赞