Android: Jak zmierzyć całkowitą wysokość ListView [duplikat]
To pytanie ma już odpowiedź tutaj:
Obliczyć rozmiar widoku listy lub jak nakazać mu pełne rozwinięcie 12 odpowiedziMuszę zmierzyć całkowitą wysokość ListView, ale wydaje się, że ciągle otrzymuję błędne wartości. Używam tego kodu:
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();
}
Problem polega na tym, że otrzymuję większą wysokość, niż powinienem. Każda pozycja na liście jest mierzona inaczej i wszystkie pozycje mają tę samą wysokość, więc zdecydowanie nie powinna tego robić. Wysokość każdego elementu jest co najmniej dwa razy większa od jego rzeczywistej wysokości.
Z góry dziękuję
edit1:
Mam dwa ListView i oba mają elementy z 6-7 polami EditText. Pokażę / ukryję ListView, jeśli użytkownik chce zapisać / usunąć wartości w EditText. Wszystko działa dobrze, z wyjątkiem sytuacji, gdy chcę wyświetlić listę, zajmuje dużo miejsca, ponieważ metoda ListView obliczona metodą wymaga dużo miejsca. Z tego powodu mam dużo pustej przestrzeni pod tym ListView. Jak trzy razy więcej pustego miejsca, które potrzebowało.