Мне нужно измерить общую высоту ListView, но кажется, что я постоянно получаю неправильные значения. Я использую этот код:
public static void setListViewHeightBasedOnChildren(ListView listView) {
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
return;
}
int totalHeight = 0;
int desiredWidth = MeasureSpec.makeMeasureSpec(listView.getWidth(),
MeasureSpec.AT_MOST);
Log.w("DESIRED WIDTH", String.valueOf(listAdapter.getCount()));
for (int i = 0; i < listAdapter.getCount(); i++) {
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(desiredWidth, MeasureSpec.UNSPECIFIED);
totalHeight += listItem.getMeasuredHeight();
Log.w("HEIGHT"+i, String.valueOf(totalHeight));
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight
+ (listView.getDividerHeight() * (listAdapter.getCount() - 1));
listView.setLayoutParams(params);
listView.requestLayout();
}
Проблема в том, что я получаю больший рост, чем я должен получить. Каждый элемент списка измеряется по-разному, и все элементы имеют одинаковую высоту, поэтому он определенно не должен этого делать. Высота каждого элемента по крайней мере вдвое превышает реальную высоту.
Спасибо заранее.
edit1:
У меня есть два ListViews, и они оба имеют элементы с 6-7 полями EditText. Я показываю/скрываю ListView, если пользователь хочет записать/удалить значения в EditText. Все работает хорошо, за исключением случаев, когда я хочу показать список, он занимает много места, потому что метод вычисления ListView требует много места. Из-за этого у меня много свободного места ниже этого ListView. Как в три раза больше пустого пространства, которое необходимо.