@Override
  public View getView(int position, View convertView, ViewGroup parent) {
    Position adapterPosition = translatePosition(position);
    if (adapterPosition.mPosition == POSITION_HEADER) {
      HeaderFillerView v = getHeaderFillerView(adapterPosition.mHeader, convertView, parent);
      View view = mDelegate.getHeaderView(adapterPosition.mHeader, (View) v.getTag(), parent);
      mGridView.detachHeader((View) v.getTag());
      v.setTag(view);
      mGridView.attachHeader(view);
      convertView = v;
      mLastHeaderViewSeen = v;
      v.forceLayout();
    } else if (adapterPosition.mPosition == POSITION_HEADER_FILLER) {
      convertView = getFillerView(convertView, parent, mLastHeaderViewSeen);
      convertView.forceLayout();
    } else if (adapterPosition.mPosition == POSITION_FILLER) {
      convertView = getFillerView(convertView, parent, mLastViewSeen);
    } else {
      convertView = mDelegate.getView(adapterPosition.mPosition, convertView, parent);
      mLastViewSeen = convertView;
    }

    return convertView;
  }