docs: private void updateHeaderVisibilities() {
          int top = stickyHeaderTop();
          int childCount = mList.getChildCount();
          for (int i = 0; i < childCount; i++) {
  
              // ensure child is a wrapper view
              View child = mList.getChildAt(i);
              if (!(child instanceof WrapperView)) {
                  continue;
              }
  
              // ensure wrapper view child has a header
              WrapperView wrapperViewChild = (WrapperView) child;
              if (!wrapperViewChild.hasHeader()) {
                  continue;
              }
  
              // update header views visibility
              View childHeader = wrapperViewChild.mHeader;
              if (wrapperViewChild.getTop() < top) {
                  if (childHeader.getVisibility() != View.INVISIBLE) {
                      childHeader.setVisibility(View.INVISIBLE);
                  }
              } else {
                  if (childHeader.getVisibility() != View.VISIBLE) {
                      childHeader.setVisibility(View.VISIBLE);
                  }
              }
          }
      }