public static void setListViewHeightBasedOnChildren(ListView listView) { IListAdapter listAdapter = listView.Adapter; if (listAdapter == null) { // pre-condition return; } int totalHeight = 0; int desiredWidth = View.MeasureSpec.MakeMeasureSpec(listView.Width, View.MeasureSpec.AT_MOST); for (int i = 0; i < listAdapter.GetCount(); i++) { View listItem = listAdapter.GetView(i, null, listView); listItem.Measure(1000, 0); totalHeight += listItem.MeasuredHeight; } ViewGroup.LayoutParams parameters = listView.GetLayoutParams(); parameters.Height = totalHeight + (listView.DividerHeight * (listAdapter.GetCount() - 1)) + 10; listView.SetLayoutParams(parameters); listView.RequestLayout(); }
private void LateUpdate() { if (mAdapter != null && ItemPre != null) { //适配器数据数量与界面网格数量的差值 int itemCountDiff = mAdapter.GetCount() - itemPointList.Count; //如果数据个数有变化需要更新界面 if (itemCountDiff != 0) { OnItemCountChange(itemCountDiff); AdjustItemsPosition(); } //界面实际位置与最后一个位置的差值 int diffPosition = GetCurrentItemId() - currentPosition; if (diffPosition != 0) { OnPositionChange(diffPosition); currentPosition = GetCurrentItemId(); AdjustItemsPosition(); } UpdateAllItem(); } }