docs: public int measureHeightOfChildrenCompat(int widthMeasureSpec, int startPosition,
              int endPosition, final int maxHeight,
              int disallowPartialChildPosition) {
          final int paddingTop = getListPaddingTop();
          final int paddingBottom = getListPaddingBottom();
          final int paddingLeft = getListPaddingLeft();
          final int paddingRight = getListPaddingRight();
          final int reportedDividerHeight = getDividerHeight();
          final Drawable divider = getDivider();
          final ListAdapter adapter = getAdapter();
          if (adapter == null) {
              return paddingTop + paddingBottom;
          }
          // Include the padding of the list
          int returnedHeight = paddingTop + paddingBottom;
          final int dividerHeight = ((reportedDividerHeight > 0) && divider != null)
                  ? reportedDividerHeight : 0;
          // The previous height value that was less than maxHeight and contained
          // no partial children
          int prevHeightWithoutPartialChild = 0;
          View child = null;
          int viewType = 0;
          int count = adapter.getCount();
          for (int i = 0; i < count; i++) {
              int newType = adapter.getItemViewType(i);
              if (newType != viewType) {
                  child = null;
                  viewType = newType;
              }
              child = adapter.getView(i, child, this);
              // Compute child height spec
              int heightMeasureSpec;
              ViewGroup.LayoutParams childLp = child.getLayoutParams();
              if (childLp == null) {
                  childLp = generateDefaultLayoutParams();
                  child.setLayoutParams(childLp);
              }
              if (childLp.height > 0) {
                  heightMeasureSpec = MeasureSpec.makeMeasureSpec(childLp.height,
                          MeasureSpec.EXACTLY);
              } else {
                  heightMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
              }
              child.measure(widthMeasureSpec, heightMeasureSpec);
              // Since this view was measured directly aginst the parent measure
              // spec, we must measure it again before reuse.
              child.forceLayout();
              if (i > 0) {
                  // Count the divider for all but one child
                  returnedHeight += dividerHeight;
              }
              returnedHeight += child.getMeasuredHeight();
              if (returnedHeight >= maxHeight) {
                  // We went over, figure out which height to return.  If returnedHeight >
                  // maxHeight, then the i'th position did not fit completely.
                  return (disallowPartialChildPosition >= 0) // Disallowing is enabled (> -1)
                          && (i > disallowPartialChildPosition) // We've past the min pos
                          && (prevHeightWithoutPartialChild > 0) // We have a prev height
                          && (returnedHeight != maxHeight) // i'th child did not fit completely
                          ? prevHeightWithoutPartialChild
                          : maxHeight;
              }
              if ((disallowPartialChildPosition >= 0) && (i >= disallowPartialChildPosition)) {
                  prevHeightWithoutPartialChild = returnedHeight;
              }
          }
          // At this point, we went through the range of children, and they each
          // completely fit, so return the returnedHeight
          return returnedHeight;
      }