code: @NonNull
      @Override
      public final ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
          Log.v(TAG, "onCreateViewHolder() viewType=" + viewType
                  + " headerItemCount=" + headerItemCount
                  + " contentItemCount=" + contentItemCount
                  + " footerItemCount=" + footerItemCount);
          // Delegate to proper methods based on the viewType ranges.
          if (viewType >= HEADER_VIEW_TYPE_OFFSET && viewType < HEADER_VIEW_TYPE_OFFSET + VIEW_TYPE_MAX_COUNT) {
              return onCreateHeaderItemViewHolder(parent, viewType - HEADER_VIEW_TYPE_OFFSET);
          } else if (viewType >= FOOTER_VIEW_TYPE_OFFSET && viewType < FOOTER_VIEW_TYPE_OFFSET + VIEW_TYPE_MAX_COUNT) {
              return onCreateFooterItemViewHolder(parent, viewType - FOOTER_VIEW_TYPE_OFFSET);
          } else if (viewType >= CONTENT_VIEW_TYPE_OFFSET && viewType < CONTENT_VIEW_TYPE_OFFSET + VIEW_TYPE_MAX_COUNT) {
              return onCreateContentItemViewHolder(parent, viewType - CONTENT_VIEW_TYPE_OFFSET);
          } else {
              // This shouldn't happen as we check that the viewType provided by the client is valid.
              throw new IllegalStateException();
          }
      }
docs: {@inheritDoc}