title: SectionedAdapter ArrayIndexOutOfBoundsException in AbsListView$RecycleBin.addScrapView() Issue?
body: <p>I have a Sectioned Adapter that I am using, however I am trying to modify it so that the sections won't appear if they are empty using if (section.adapter.getCount() > 0).  I have the following class:</p>
  
  <pre><code>abstract public class SectionedAdapter extends BaseAdapter {
  
  abstract protected View getHeaderView(String caption, int index, View convertView, ViewGroup parent);
  
  private List&lt;Section&gt; sections = new ArrayList&lt;Section&gt;(); 
  private static int TYPE_SECTION_HEADER = 0; 
  
  public SectionedAdapter() {
      super(); 
  }
  
  public void addSection(String caption, Adapter adapter) { 
      sections.add(new Section(caption, adapter)); 
  }
  
  public void clear() {
      sections.clear();
      notifyDataSetInvalidated();
  }
  
  @Override
  public Object getItem(int position) { 
  
      for (Section section : this.sections) {
          if (section.adapter.getCount() &gt; 0) {
  
              if (position == 0) {
                  return section;
              }
  
              int size = section.adapter.getCount() + 1;
  
              if (position &lt; size) {
                  return section.adapter.getItem(position - 1);
              }
  
              position -= size; 
          }
      } 
  
      return null; 
  }
  
  @Override
  public int getCount() {
      int total = 0; 
      for (Section section : this.sections) {
          if (section.adapter.getCount() &gt; 0) {
              // Add Header and Section
              total += section.adapter.getCount() + 1;
          }
      }
      return total;
  } 
  
  @Override
  public int getViewTypeCount() {
      int total = 1; // Add Header
      for (Section section : this.sections) {
          if (section.adapter.getCount() &gt; 0) {
              // Add Sections
              total += section.adapter.getViewTypeCount();
          }
      } 
      return total;
  } 
  
  @Override
  public int getItemViewType(int position) { 
      int typeOffset = TYPE_SECTION_HEADER + 1;
  
      for (Section section : this.sections) {
          if (section.adapter.getCount() &gt; 0) {
  
              if (position == 0) {
                  return TYPE_SECTION_HEADER;
              }
  
              int size = section.adapter.getCount() + 1;
  
              if (position &lt; size) {
                  return (typeOffset + section.adapter.getItemViewType(position - 1));
              }
  
              position -= size; 
              typeOffset += section.adapter.getViewTypeCount();
          }
      } 
  
      return Adapter.IGNORE_ITEM_VIEW_TYPE;
  }
  
  @Override
  public boolean areAllItemsEnabled() { 
      return false; 
  }
  
  @Override
  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 (section.adapter.getCount() &gt; 0) {
  
              if (position == 0) {
                  return getHeaderView(section.caption, sectionIndex, null, parent);
              }
  
              int size = section.adapter.getCount() + 1;
  
              if (position &lt; size) {
                  return section.adapter.getView(position - 1, null, 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; 
      } 
  }
  </code></pre>
  
  <p>}</p>
  
  <p>This is working however sometimes it will crash with the error 
  ArrayIndexOutOfBoundsException in AbsListView$RecycleBin.addScrapView()</p>
  
  <pre><code>java.lang.ArrayIndexOutOfBoundsException
  at android.widget.AbsListView$RecycleBin.addScrapView(AbsListView.java:4186)
  at android.widget.ListView.layoutChildren(ListView.java:1572)
  at android.widget.AbsListView.onLayout(AbsListView.java:1172)
  at android.view.View.layout(View.java:7037)
  at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1249)
  at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1125)
  at android.widget.LinearLayout.onLayout(LinearLayout.java:1042)
  at android.view.View.layout(View.java:7037)
  at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
  at android.view.View.layout(View.java:7037)
  at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
  at android.view.View.layout(View.java:7037)
  at android.view.ViewRoot.performTraversals(ViewRoot.java:1054)
  at android.view.ViewRoot.handleMessage(ViewRoot.java:1736)
  at android.os.Handler.dispatchMessage(Handler.java:99)
  at android.os.Looper.loop(Looper.java:143)
  at android.app.ActivityThread.main(ActivityThread.java:4701)
  at java.lang.reflect.Method.invokeNative(Native Method)
  at java.lang.reflect.Method.invoke(Method.java:521)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
  at dalvik.system.NativeStart.main(Native Method)
  </code></pre>
  
  <p>I know that this error is most likely related to getViewTypeCount() or getItemViewType(int position) but I can't work out where I am going wrong (due to other StackOverflow searches).  The exception doesn't occur reliably so I am at a loss to why this would be occurring.  Am I missing something here?</p>