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();
}
問題は、受け取るべきよりも高い身長を受け取っていることです。すべてのリスト項目は異なる方法で測定され、すべての項目の高さが同じであるため、絶対にそうすべきではありません。各要素の高さは、実際の高さの少なくとも 2 倍です。
前もって感謝します。
編集1:
私は 2 つの ListViews を持っており、どちらにも 6 ~ 7 個の EditText フィールドを持つアイテムがあります。ユーザーが EditText に値を書き込み/削除したい場合は、ListView を表示/非表示にします。リストを表示したい場合を除いて、すべてがうまく機能します。メソッドで計算されたListViewには多くのスペースが必要なため、多くのスペースが必要です。そのため、その ListView の下に空きスペースがたくさんあります。必要な空きスペースの 3 倍のように。