Bạn phải đặt chiều cao của chế độ xem danh sách thành giá trị sửa lỗi. Nếu nội dung của bạn là tự động có một chức năng tốt đẹp để đo listsize thực tế sau khi cài đặt lại adapter:
public static void setListViewHeightBasedOnChildren(ListView listView) {
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
// pre-condition
return;
}
int totalHeight = 0;
int desiredWidth = MeasureSpec.makeMeasureSpec(listView.getWidth(), MeasureSpec.AT_MOST);
for (int i = 0; i < listAdapter.getCount(); i++) {
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(desiredWidth, MeasureSpec.UNSPECIFIED);
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
listView.setLayoutParams(params);
listView.requestLayout();
}
bạn phải gọi phương thức tĩnh này với listview của bạn như paramter sau khi thiết lập adapter của bạn. Bây giờ bạn có thể thêm một scrollview (bên trong là listview của bạn và quan điểm khác). Tôi sẽ nói hành vi này trong 2.3.3 trước đó là một lỗi nhỏ ... không có cách nào dễ dàng để bao gồm listview bên trong một scrollview ngoại trừ cách tôi mô tả. Vì lý do đó, họ đã giới thiệu chế độ OVERSCROLL_NEVER :)
Mã từ DougW!
Nguồn
2012-04-22 17:11:45
Brilliant !!! Điều này thực sự giúp tôi tiết kiệm rất nhiều rắc rối. Làm cách nào bạn biết tên phương thức cần tìm kiếm, API S2 có công khai không? – npace