前輩們給出了一個方法,重新計算子ListView的大小,然後在設置本ListView的Adapter之後運行這個方法就好了,具體代碼如下:
/**
* 設置Listview的高度
*/
public void setListViewHeight(ListView listView) {
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
return;
}
int totalHeight = 0;
for (int i = 0; i < listAdapter.getCount(); i++) {
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
listView.setLayoutParams(params);
}
這個方法設置的item的Layout必須是帶有onMeasure()方法的控件,否則在計算的時候會報錯,建議使用LinearLayout。
下面是我父listview的adpter的getview代碼
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
convertView = mInflater.inflate(
R.layout.privatecustomer_item, parent, false);
holder.bt1 = (Button) convertView.findViewById(R.id.bt_jiatingxinxi);
holder.lv1 = (ListView) convertView.findViewById(R.id.lv_item_in_privatecustomer);
holder.tv1 = (TextView) convertView.findViewById(R.id.tv1_main_tab03_item);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.lv1.setAdapter(madpterson);
setListViewHeight(holder.lv1);//子listview設置了adapter之後,再設置高度,就ok
return convertView;
}