Android 自定义ListView只显示第一条数据的问题

最近,要在应用中做一个功能,查询SQLite数据库中的记录,用列表进行展示。

关于选择哪种布局,因为考虑到界面上要增加一些筛选条件,界面会稍显复杂,所以就没有继承ListFragment,而是继承了Fragment,并且用了自定义的ListView:

<?xml version="1.0" encoding="utf-8"?> 

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent">

<LinearLayout
    android:id="@+id/fragmentContainer"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    android:dividerHeight="1px"
        android:divider="#B8B8B8" >
   
    <LinearLayout 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:orientation="horizontal"
        android:background="#B8B8B8"
        android:dividerHeight="1px"
        android:divider="#B8B8B8"  > 
  
        <TextView 
            android:id="@+id/title_index" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content" 
            android:text="序号" 
            android:gravity="center_horizontal"
            android:textSize="13sp" /> 
   <!--表头 。。。 。。。-->

    </LinearLayout> 
   <!--ListView主体-->
    <ListView 
        android:id="@+id/samplelist" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent"
        android:dividerHeight="1px"
     
        android:divider="#B8B8B8" > 
    </ListView> 
   
</LinearLayout>
</ScrollView>


数据库里有30条记录,但运行的时候发现界面上只显示了1条,查看输出的话,发现其实30条记录都查出来的,因此判断问题出在UI层面:

Android 自定义ListView只显示第一条数据的问题_第1张图片

整了半天没整出来,不过,不经意间发现这是一个以前遇到并解决过的问题,原来这是因为ListView处在ScrollView里面之后导致的问题,解决方法如下:

/**
	 * 为了解决ListView在ScrollView中只能显示一行数据的问题
	 * 
	 * @param listView
	 */
	public static void setListViewHeightBasedOnChildren(ListView listView) {
		// 获取ListView对应的Adapter
		ListAdapter listAdapter = 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);
			listItem.measure(0, 0); // 计算子项View 的宽高
			totalHeight += listItem.getMeasuredHeight(); // 统计所有子项的总高度
		}

		ViewGroup.LayoutParams params = listView.getLayoutParams();
		params.height = totalHeight
				+ (listView.getDividerHeight() * (listAdapter.getCount() - 1));
		// listView.getDividerHeight()获取子项间分隔符占用的高度
		// params.height最后得到整个ListView完整显示需要的高度
		listView.setLayoutParams(params);
	}

然后在Activity或Fragment中调用该方法:

@Override
		public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {			
			// Create an adapter to point at this cursor
			SampleCursorAdapter adapter = new SampleCursorAdapter(getActivity(), (SampleCursor)cursor);
			lv.setAdapter(adapter);
			Utils.setListViewHeightBasedOnChildren(lv);
		}

问题解决:

Android 自定义ListView只显示第一条数据的问题_第2张图片



你可能感兴趣的:(Android 自定义ListView只显示第一条数据的问题)