title: Why does getView return wrong convertView objects on SeparatedListAdapter?
body: <p>I adapted the SeparatedListAdapter from Jeff Sharkey to my needs and got something like this:</p>
  
  <pre><code>public class SeparatedListAdapter&lt;T&gt; extends BaseAdapter {
  
      @SuppressWarnings("unused")
      private final String LOG_TAG = getClass().getSimpleName();
  
      public final static int TYPE_SECTION_HEADER = 0;
  
      public final Map&lt;T, Adapter&gt; sectionAdapters;
      public final ArrayAdapter&lt;T&gt; headerAdapter;
  
      public SeparatedListAdapter(ArrayAdapter&lt;T&gt; headerAdapter) {
          super();
          this.sectionAdapters = new LinkedHashMap&lt;T,Adapter&gt;();
          this.headerAdapter = headerAdapter;
      }
  
      public void addSection(T section, Adapter adapter) {
          this.headerAdapter.add(section);
          this.sectionAdapters.put(section, adapter);
      }
  
      public void clearSections() {
          this.headerAdapter.clear();
          this.sectionAdapters.clear();
      }
  
      @Override
      public int getCount() {
          // total together all sections, plus one for each section header
          int total = 0;
          for(Adapter adapter : this.sectionAdapters.values())
              total += adapter.getCount() + 1;
          return total;
      }
  
      @Override
      public int getViewTypeCount() {
          //count headers, then total all sections
          int total = this.headerAdapter.getViewTypeCount();
          for(Adapter adapter : this.sectionAdapters.values())
              total += adapter.getViewTypeCount();
          return total;
      }
  
      @Override
      public int getItemViewType(int position) {
          int type = 1;
          for(Object section : this.sectionAdapters.keySet()) {
              Adapter adapter = sectionAdapters.get(section);
              int size = adapter.getCount() + 1;
  
              // check if position inside this section 
              if(position == 0) return TYPE_SECTION_HEADER;
              if(position &lt; size) return type + adapter.getItemViewType(position - 1);
  
              // otherwise jump into next section
              position -= size;
              type += adapter.getViewTypeCount();
  
          }
          return -1;
      }
  
      @Override
      public View getView(int position, View convertView, ViewGroup parent) {
          int sectionnum = 0;
          for(Object section : this.sectionAdapters.keySet()) {
              Adapter adapter = sectionAdapters.get(section);
              int size = adapter.getCount() + 1;
  
              // check if position inside this section 
              if(position == 0) 
                  return headerAdapter.getView(sectionnum, convertView, parent);
              if(position &lt; size) 
                  return adapter.getView(position - 1, convertView, parent);
  
              // otherwise jump into next section
              position -= size;
              sectionnum++;
          }
          return null;
      }
  
      @Override
      public boolean areAllItemsEnabled() {
          return false;
      }
  
      @Override
      public boolean isEnabled(int position) {
          return (getItemViewType(position) != TYPE_SECTION_HEADER);
      }
  }
  </code></pre>
  
  <p>The problem I encountered is that the API feeds onvertView objects from the wrong adapter to getView(), leading to problems. I think I correctly implemented getViewTypeCount() and getItemViewType() and checked that with the debugger. What else could go wrong?</p>
  
  <p>Here is one of my adapters:</p>
  
  <pre><code>public static class MeetingAdapter extends ArrayAdapter&lt;Meeting&gt; {
      static class ViewHolder {
          TextView title;
      }
      private LayoutInflater inflater;
  
      public MeetingAdapter(Activity context, List&lt;Meeting&gt; meetings) {
          super(context, 0, meetings);
          this.inflater = LayoutInflater.from(context);
      }
  
      @Override
      public View getView(int position, View convertView, ViewGroup parent) {
          Meeting meeting = getItem(position);
  
          View rowView = convertView;
          ViewHolder holder;
  
          // instanceof should not be necessary!!! normally convertView should be of the right type!
          if (rowView == null || !(rowView.getTag() instanceof ViewHolder)) {
              rowView = inflater.inflate(R.layout.list_item, null);
              holder = new ViewHolder();
              holder.title = (TextView)rowView; // tmp - layout contains only a textview for the moment
              rowView.setTag(holder);
          } else {
              holder = (ViewHolder)rowView.getTag();
          }
          holder.title.setText(meeting.getTrack());
          return rowView;
      }
  }
  </code></pre>
  
  <p>Help please? Getting crazy over this.</p>