android:解决安卓ListView只显示一行的问题,或者不能显示所有数据的问题。

android:解决安卓ListView只显示一行的问题 - 简书 (jianshu.com)

这里是对 上面连接的一个补充说明,也可以说是我的使用说明,我用的是第一中方法

1.把下面这个函数放进代码里面,随意一个class文件都可以,我放进我的hyh_toastutil.jave文件里面

 public static void setListViewHeightBasedOnChildren(ListView listView) {
        ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) { // pre-condition
            return;
        } 
        int totalHeight = 0; for (int i = 0; i < listAdapter.getCount(); i++) {
            View listItem = listAdapter.getView(i, null, listView); // listItem.measure(0, 0);
                    listItem.measure(
                    MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
                    MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
            totalHeight += listItem.getMeasuredHeight();
        }

        ViewGroup.LayoutParams params = listView.getLayoutParams();
        params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
        listView.setLayoutParams(params);
    }

2.然后在自己设置设配器之后 viewById.setAdapter(adapter); 之后在使用adapter.notifyDataSetChanged();
 hyh_toastutil.setListViewHeightBasedOnChildren(viewById);

去动态调整高度

List<hyh_user>  list = mHelper.hyhqueryAll();
							
							cursor=hyhUserDBHelper.hyhcursor_ex;
							
							 adapter = new SimpleCursorAdapter(hyhsjk.this, R.layout.list_item, cursor, from, to, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
							 
							 viewById.setAdapter(adapter);
							 adapter.notifyDataSetChanged();
							 hyh_toastutil.setListViewHeightBasedOnChildren(viewById);

3.我使用之后发现一个问题就是 发现在一个矩形内不能展示数据库的所有内容,终会有一两个行的数据看不到,所有我在作者上面的代码上改了一点,加了一点高度,下面是我改了之后的代码。

 public static void setListViewHeightBasedOnChildren(ListView listView) {
	        ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) { // pre-condition
	            return;
	        } 
	        int totalHeight = 0; for (int i = 0; i < listAdapter.getCount(); i++) {
	            View listItem = listAdapter.getView(i, null, listView); // listItem.measure(0, 0);
	                    listItem.measure(
	                    MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
	                    MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
	// 如果发现在一个矩形内不能展示数据库的所有内容,可以加这个 2*listItem.getMeasuredHeight()/listAdapter.getCount() 还不行可以把数字改大
	            totalHeight += listItem.getMeasuredHeight()+2*listItem.getMeasuredHeight()/listAdapter.getCount() ;
	        }