ListView Android com headings (código de Jeff Sharkey)

Bom dia a todos! Estou com uma duvida no código de Jeff Sharkey para implementação de uma listview com seções e headings, minha dúvida consiste no método getViewTypeCount() e no método getItemViewType, eis o código:
`

package com.commonsware.android.listview;
import android.view.View;import android.view.ViewGroup;
import android.widget.Adapter;
import android.widget.BaseAdapter;
import java.util.ArrayList;
import java.util.List;

abstract public class SectionedAdapter extends BaseAdapter {
abstract protected View getHeaderView(String caption,int index, View convertView,
ViewGroup parent);

private List<Section> sections=new ArrayList<Section>();
private static int TYPE_SECTION_HEADER=0;

public SectionedAdapter() {
 super();
}

public void addSection(String caption, Adapter adapter) {
 sections.add(new Section(caption, adapter));
}

public Object getItem(int position) {
for (Section section : this.sections) {
 if (position==0) {
  return(section);
 }

 int size=section.adapter.getCount()+1;
 if (position<size) {return(section.adapter.getItem(position-1));}

 position-=size;
}
 return(null);
}


public int getCount() {
 int total=0;
 for (Section section : this.sections) {
  total+=section.adapter.getCount()+1; // add one for header
}
 return(total);
}

public int getViewTypeCount() {
 int total=1; // one for the header, plus those from sections
 for (Section section : this.sections) {
  total+=section.adapter.getViewTypeCount();
 }
  return(total);
 }
public int getItemViewType(int position) {
 int typeOffset=TYPE_SECTION_HEADER+1; // start counting from here
 for (Section section : this.sections) {
  if (position==0) {
   return(TYPE_SECTION_HEADER);
 }
  int size=section.adapter.getCount()+1;
  if (position<size) {
   return(typeOffset+section.adapter.getItemViewType(position-1));
 }
  position-=size;
  typeOffset+=section.adapter.getViewTypeCount();
 }
 return(-1);
}

public boolean areAllItemsSelectable() {
 return(false);
}

public boolean isEnabled(int position) {
 return(getItemViewType(position)!=TYPE_SECTION_HEADER);
}

@Override
public View getView(int position, View convertView,
ViewGroup parent) {
 int sectionIndex=0;
 for (Section section : this.sections) {
  if (position==0) {
   return(getHeaderView(section.caption, sectionIndex,
   convertView, parent));
  }

  int size=section.adapter.getCount()+1;
  if (position<size) {
   return(section.adapter.getView(position-1, convertView, parent));
  }
  position-=size;
  sectionIndex++;
  }
  return(null);
  }

  @Override
  public long getItemId(int position) {
  return(position);
  }

  class Section {
  String caption;
  Adapter adapter;
  Section(String caption, Adapter adapter) {
  this.caption=caption;
  this.adapter=adapter;
  }
 }
}

`

Se alguém souber como me ajudar aqui, minha dúvida principal é por que no getViewTypeCount ele considera o total inicialmente como 1 (devido ao header), todavia se cada seção vai ter um header e um content value, deveriam ser dois tipos de view por seção e não um header + 1 view para cada seção como está no código, se alguém puder me exclarecer, estou nessa dúvida já tem algum tempo, agradeço qualquer insight!