title: Android ListView headers
body: <p>I have ListView that has some kind of events on it. Events are sorted by day, and I would like to have header with date on it for every day, and then events listen below.</p>
  
  <p>Here is how I populate that list:</p>
  
  <pre><code>ArrayList&lt;TwoText&gt; crs = new ArrayList&lt;TwoText&gt;();
  
  crs.add(new TwoText("This will be header", event.getDate()));
  
  for (Event event : events) {
      crs.add(new TwoText(event.getStartString() + "-" + event.getEndString(), event.getSubject()));
  }
  
  arrayAdapter = new TwoTextArrayAdapter(this, R.layout.my_list_item, crs);
  lv1.setAdapter(arrayAdapter);
  </code></pre>
  
  <p>and this is how my class TwoText looks:</p>
  
  <pre><code>public class TwoText {
      public String classID;
      public String state;
  
      public TwoText(String classID, String state) {
          this.classID = classID;
          this.state = state;
      }
  }
  </code></pre>
  
  <p>and this is how my TwoTextArrayAdapter class looks:</p>
  
  <pre><code>import java.util.ArrayList;
  import android.app.Activity;
  import android.content.Context;
  import android.view.LayoutInflater;
  import android.view.View;
  import android.view.ViewGroup;
  import android.widget.ArrayAdapter;
  import android.widget.TextView;
  
  public class TwoTextArrayAdapter extends ArrayAdapter&lt;TwoText&gt; {
  
      private ArrayList&lt;TwoText&gt; classes;
      private Activity con;
      TextView seperator;
  
      public TwoTextArrayAdapter(Activity context, int textViewResourceId, ArrayList&lt;TwoText&gt; classes) {
          super(context, textViewResourceId, classes);
          this.con = context;
          this.classes = classes;
  
      }
  
      @Override
  
      public View getView(int position, View convertView, ViewGroup parent) {
  
          View v = convertView;
  
          if (v == null) {
  
              LayoutInflater vi = (LayoutInflater) con.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  
              v = vi.inflate(R.layout.my_list_item, null);
  
          }
  
          TwoText user = classes.get(position);
  
          if (user != null) {
  
              TextView content1 = (TextView) v.findViewById(R.id.list_content1);
  
              TextView content2 = (TextView) v.findViewById(R.id.list_content2);
  
              if (content1 != null) {
  
                  content1.setText(user.classID);
              }   
              if(content2 != null) {
  
                  content2.setText(user.state);
              }
          }
          return v;
      }
  }
  </code></pre>
  
  <p>and this is my_list_item.xml</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
  &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:orientation="vertical" &gt;
  
      &lt;TextView
          style="?android:attr/listSeparatorTextViewStyle"
          android:id="@+id/separator"
          android:text="Header"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:background="#757678"
          android:textColor="#f5c227" /&gt;
  
      &lt;LinearLayout
          xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:orientation="horizontal" &gt;
  
          &lt;TextView
              android:id="@+id/list_content1"
              android:layout_width="wrap_content"
              android:layout_height="match_parent"
              android:layout_margin="5dip"
              android:clickable="false"
              android:gravity="center"
              android:longClickable="false"
              android:paddingBottom="1dip"
              android:paddingTop="1dip"
              android:text="sample"
              android:textColor="#ff7f1d"
              android:textSize="17dip"
              android:textStyle="bold" /&gt;
  
          &lt;TextView
              android:id="@+id/list_content2"
              android:layout_width="wrap_content"
              android:layout_height="match_parent"
              android:layout_margin="5dip"
              android:clickable="false"
              android:gravity="center"
              android:linksClickable="false"
              android:longClickable="false"
              android:paddingBottom="1dip"
              android:paddingTop="1dip"
              android:text="sample"
              android:textColor="#6d6d6d"
              android:textSize="17dip" /&gt;
      &lt;/LinearLayout&gt;
  
  &lt;/LinearLayout&gt;
  </code></pre>
  
  <p>what I do at the moment is that I am adding header just as regular list object, but Id like it to be as header and in my case have a date on it.</p>
  
  <p>I have this code in my xml for header:</p>
  
  <pre><code>&lt;TextView
          style="?android:attr/listSeparatorTextViewStyle"
          android:id="@+id/separator"
          android:text="Header"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:background="#757678"
          android:textColor="#f5c227" /&gt;
  </code></pre>
  
  <p>and I tried hiding it when it is unneccessary and showing it when neccessary but I just messed up rest of my code. I tried few more tutorials but they also had same effect.</p>
  
  <p>Could anyone guide me on how to do that easy way?</p>