title: how to add separators in a listview at specific positions?
body: <p>I have a <code>ListView</code> with custom <code>Adapter</code> . I have to add at position 2,6,9 separators. How to do that?
  Here is my code</p>
  
  <pre><code>    class MyIndexerAdapter&lt;T&gt; extends ArrayAdapter&lt;T&gt; implements SectionIndexer {
  
      ArrayList&lt;String&gt; myElements;
      HashMap&lt;String, Integer&gt; alphaIndexer;
      private static final int TYPE_ITEM = 0;
      private static final int TYPE_SEPARATOR = 1;
      private static final int TYPE_MAX_COUNT = TYPE_SEPARATOR + 1;
      TreeSet mSeparatorsSet = new TreeSet();
      String[] sections;
      LayoutInflater mInflater;
  
      public MyIndexerAdapter(Context context, int textViewResourceId,
                      List&lt;T&gt; objects) {
  
  
              super(context, textViewResourceId, objects);
              mInflater=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
              myElements = (ArrayList&lt;String&gt;) objects;
              // here is the tricky stuff
              alphaIndexer = new HashMap&lt;String, Integer&gt;();
              // in this hashmap we will store here the positions for
              // the sections
  
              int size = elements.size();
              for (int i = size - 1; i &gt;= 0; i--) {
                      String element = elements.get(i);
                      alphaIndexer.put(element.substring(0, 1), i);
              //We store the first letter of the word, and its index.
              //The Hashmap will replace the value for identical keys are putted in
              }
  
              // now we have an hashmap containing for each first-letter
              // sections(key), the index(value) in where this sections begins
  
              // we have now to build the sections(letters to be displayed)
              // array .it must contains the keys, and must (I do so...) be
              // ordered alphabetically
  
              Set&lt;String&gt; keys = alphaIndexer.keySet(); // set of letters ...sets
              // cannot be sorted...
  
              Iterator&lt;String&gt; it = keys.iterator();
              ArrayList&lt;String&gt; keyList = new ArrayList&lt;String&gt;(); // list can be
              // sorted
  
              while (it.hasNext()) {
                      String key = it.next();
                      keyList.add(key);
              }
  
              Collections.sort(keyList);
  
              sections = new String[keyList.size()]; // simple conversion to an
              // array of object
              keyList.toArray(sections);
  
              // ooOO00K !
  
      }
  
   public int getItemViewType(int position)
   {
       return  mSeparatorsSet.contains(position) ? TYPE_SEPARATOR : TYPE_ITEM;
   }
  
   public int getViewTypeCount()
   {
       return TYPE_MAX_COUNT;
   }
  
      public int getPositionForSection(int section) {
              // Log.v("getPositionForSection", ""+section);
              String letter = sections[section];
  
              return alphaIndexer.get(letter);
      }
  
      public int getSectionForPosition(int position) {
  
              // you will notice it will be never called (right?)
              Log.v("getSectionForPosition", "called");
              getSections();
              return 0;
      }
  
      public Object[] getSections() {
  
              return sections; // to string will be called each object, to display
              // the letter
      }
      public void onListItemClick(ListView parent,View v, int position, long id)
      {
  
      Toast.makeText(getContext(), "you have selected" + elements.get(position), Toast.LENGTH_SHORT).show();
      }
      @Override
      public View getView(int position, View convertView, ViewGroup parent) {
          ViewHolder holder = null;
          int type = getItemViewType(position);
          System.out.println("getView " + position + " " + convertView + " type = " + type);
          if (convertView == null) {
              holder = new ViewHolder();
              switch (type) {
                  case TYPE_ITEM:
                      convertView = mInflater.inflate(R.layout.main, null);
                      holder.textView = (TextView)convertView.findViewById(R.id.text);
                      //break;
                  case TYPE_SEPARATOR:
                      convertView = mInflater.inflate(R.layout.item1, null);
                      holder.textView = (TextView)convertView.findViewById(R.id.textSeparator);
                      break;
              }
              convertView.setTag(holder);
          } else {
              holder = (ViewHolder)convertView.getTag();
          }
          holder.textView.setText(elements.get(position));
          return convertView;
      }
  
  }
  
  
  }
  </code></pre>