title: List view with simple cursor adapter items checked are un-checked during scroll
body: <p>I have problem that I couldn't find answer on SO - all problems solved on SO where about too much different issue and didn't work.
  Problem is -<br>
  <strong>1. Clicked rows in ListView (after click they are marked with blue coolor background, and checked box) loose their marks of beeing clicked (checked checkbox and color) after scrolling.</strong><br>
  <strong>2. Even more - other rows are marked during scroll even that are not clicked.</strong><br>
  ListView is bound to my Custom Simple Cursor Adapter which gets data from SQLite database.
  Each row of listview has many columns with textboxes and one checkbox - so default multiple choice mode selection in ListView doesn't work in my case - I use onItemClick to get selected items. In ListView Activity I handle checked items on my own in a list. 
  ListView is also in a HorizontalScrollView.</p>
  
  <p>So these are my classes and layouts:</p>
  
  <p>MyListActivity</p>
  
  <pre><code>public class MyListActivity extends ListActivity
      { .....
      public void initComponents()
      {
          baza = dbMan.openDB(true);
          cursorListaFaktur = wyswietlWszystkieTowary();
          startManagingCursor(cursorListaFaktur);
                  fakturyLista = this.getListView();
          fakturyLista.setScrollContainer(true);
          fakturyLista.setScrollingCacheEnabled(true);
  
          fakturyLista.setItemsCanFocus(false);
          fakturyLista.setTextFilterEnabled(true);
          fakturyLista.setItemChecked(0, true);
  
  
          String[] columns = new String[] { "NRDOK", "NAZWADOK", "ANULOWANY",
                  "NAZWASKR", "DATA", "SUMA", "MIEJSCOWOSC", "TERMIN",
                  "WYEKSPORTOWANY", "MSPRZ_DOKUMENT.UWAGI" };
  
          int[] kontrolki = new int[] { R.id.ID_FakturyRow_NrFakt,
                  R.id.ID_FakturyRow_Typ, R.id.ID_FakturyRow_Anulowany,
                  R.id.ID_FakturyRow_DataSprzed,  
                                  R.id.ID_FakturyRow_Kontrahent,
                  R.id.ID_FakturyRow_Suma, R.id.ID_FakturyRow_Miejscowosc,
                  R.id.ID_FakturyRow_Termin, R.id.ID_FakturyRow_Wyeksp,
                  R.id.ID_FakturyRow_Uwagi };
  
          String[] columnsRaportKasowy = new String[] { "NRDOK", "NAZWADOK",
                  "GOTOWKA", "GOTOWKA", "NAZWASKR", "DATA", "UWAGI" };
  
          int[] kontrolkiRaportKasowy = new int[] {
                  R.id.ID_RaportKasowyRow_NrFakt,
                                  R.id.ID_RaportKasowyRow_Typ,
                  R.id.ID_RaportKasowyRow_Wplata,
                  R.id.ID_RaportKasowyRow_Wyplata,
                  R.id.ID_RaportKasowyRow_Kontrahent,
                  R.id.ID_RaportKasowyRow_DataSprzed,
                  R.id.ID_RaportKasowyRow_Uwagi };
  
          if (raportKasowy)
          {
              adapterFaktury = new MSprzedazRaportKasowyAdapter(this,
                    R.layout.raportkasowy_row, cursorListaFaktur,  
                    columnsRaportKasowy,   kontrolkiRaportKasowy);
          }
          else
          {
              adapterFaktury = new 
                          MSprzedazListViewAdapter(this,R.layout.faktury_row,
                           cursorListaFaktur, columns, kontrolki);
          }
              fakturyLista.setOnItemClickListener(new OnItemClickListener() {
  
                  public void onItemClick(AdapterView&lt;?&gt; arg0, View arg1,
                          int arg2, long arg3)
                  {
                      LinearLayout linLay = (LinearLayout) arg1;
                      ArrayList&lt;View&gt; kontrolki = arg1.getTouchables();
                      CheckBox chBox = (CheckBox) kontrolki.get(0);
                      chBox.setChecked(!chBox.isChecked());
                      Cursor cursor = adapterFaktury.getCursor();
                      cursor.moveToPosition(arg2);
                      String tekstKom = "";
                                if(MSprzedazUtils.znajdzIdWliscieZazn(
                                cursor.getInt(cursor.getColumnIndex("_id"))
                                , listaZaznaczonych) == null)
                      {
  
              listaZaznaczonych.add(cursor.getInt(cursor.getColumnIndex("_id")));
  
              linLay.setBackgroundColor(Color.rgb(110, 151, 186));
  
                          MSprzedazUtils.wpisDoLoga(tekstKom);
  
                      }
                      else
                      {
                          try
                          {
                          listaZaznaczonych.remove((int)  
                                              MSprzedazUtils.znajdzIdWliscieZazn(
                                            cursor.getInt(cursor.getColumnIndex("_id")),
                                             listaZaznaczonych));
                          MSprzedazUtils.wpisDoLoga(tekstKom);
                          }
                          catch(IndexOutOfBoundsException ex)
                          {
  
  
                          MSprzedazUtils.wpisDoLoga("Błąd"+tekstKom);
                          }
                      }
                  }
              });
  </code></pre>
  
  <p>MySimpleCursorAdapter</p>
  
  <pre><code>public class MySimpleCursorAdapter extends SimpleCursorAdapter
          {
              class ViewHolder
          {
              CheckBox chckBoxZazn;
              LinearLayout linLay;
              TextView nrDok;
              TextView typDok;
              boolean isSelected;
              TextView txtData;
              TextView txtKontrahent;
              TextView txtSuma;
              TextView txtAnulowany;
              TextView txtMiejscowosc;
              TextView txtTermin;
              TextView txtWyeksp;
              TextView txtUwagi;
          }
  
          @Override
          public void bindView(View convertView, Context context, Cursor cursor)
          {
              if (convertView.getTag() != null)
                  holder = (ViewHolder) convertView.getTag();
              {
                  // holder.linLay = (LinearLayout)convertView;
                  holder.chckBoxZazn = (CheckBox) convertView.findViewById(R.id.ID_FakturyRow_ChckBoxFakturyWybor);
                  holder.nrDok = (TextView) convertView.findViewById(R.id.ID_FakturyRow_NrFakt);
                  holder.typDok = (TextView) convertView.findViewById(R.id.ID_FakturyRow_Typ);
                  holder.txtAnulowany = (TextView) convertView.findViewById(R.id.ID_FakturyRow_Anulowany);
                  holder.txtData = (TextView) convertView.findViewById(R.id.ID_FakturyRow_Kontrahent);
                  holder.txtKontrahent = (TextView) convertView.findViewById(R.id.ID_FakturyRow_DataSprzed);
                  holder.txtMiejscowosc = (TextView) convertView.findViewById(R.id.ID_FakturyRow_Miejscowosc);
                  holder.txtSuma = (TextView) convertView.findViewById(R.id.ID_FakturyRow_Suma);
                  holder.txtTermin = (TextView) convertView.findViewById(R.id.ID_FakturyRow_Termin);
                  holder.txtWyeksp = (TextView) convertView.findViewById(R.id.ID_FakturyRow_Wyeksp);
                  holder.txtUwagi = (TextView) convertView.findViewById(R.id.ID_FakturyRow_Uwagi);
  
              }
  
              holder.chckBoxZazn.setTag(cursor.getPosition());
  
  
              holder.nrDok.setText(cursor.getString(cursor.getColumnIndex("NRDOK")));
              holder.typDok.setText(cursor.getString(cursor.getColumnIndex("NAZWADOK")));
              if (cursor.getString(cursor.getColumnIndex("DATA")) != null)
                  holder.txtData.setText(cursor.getString(cursor.getColumnIndex("DATA")).substring(0, 10));
              else
                  holder.txtData.setText("-");
              if (cursor.getInt(cursor.getColumnIndex("ANULOWANY")) == 0)
                  holder.txtAnulowany.setText("NIE");
              else
                  holder.txtAnulowany.setText("TAK");
  
              if (cursor.getString(cursor.getColumnIndex("NAZWASKR")) != null)
                  holder.txtKontrahent.setText(cursor.getString(cursor.getColumnIndex("NAZWASKR")));
              else
                  holder.txtKontrahent.setText("-");
              if (cursor.getString(cursor.getColumnIndex("MIEJSCOWOSC")) != null)
                  holder.txtMiejscowosc.setText(cursor.getString(cursor.getColumnIndex("MIEJSCOWOSC")));
              else
                  holder.txtMiejscowosc.setText("-");
              holder.txtSuma.setText(cursor.getString(cursor.getColumnIndex("SUMA")));
              if (cursor.getInt(cursor.getColumnIndex("WYEKSPORTOWANY")) == 0)
              {
                  holder.txtWyeksp.setText("NIE");
                  holder.txtWyeksp.setBackgroundColor(Color.BLACK);
              }
              else
              {
                  holder.txtWyeksp.setText("TAK");
                  convertView.setBackgroundColor(Color.DKGRAY);
              }
              if (cursor.getString(cursor.getColumnIndex("TERMIN")) != null)
                  holder.txtTermin.setText(cursor.getString(cursor.getColumnIndex("TERMIN")).substring(0, 10));
              else
                  holder.txtTermin.setText("-");
              holder.txtUwagi.setText(cursor.getString(cursor.getColumnIndex("UWAGI")));
  
              if (cursor.getCount() &gt; 0 &amp;&amp; cursor.getPosition() &lt; cursor.getColumnCount())
                  holder.chckBoxZazn.setChecked(jestZaznaczony[cursor.getPosition()]);
  
          }
  
          @Override
          public void onClick(View v)
          {
              if (v.isFocusable())
              {
                  jestZaznaczony[cursor.getPosition()] = !jestZaznaczony[cursor.getPosition()];
                  holder.chckBoxZazn.setChecked(jestZaznaczony[cursor.getPosition()]);
  
              }
      }
  
  }   
  </code></pre>
  
  <p>listview_row.xml</p>
  
  <pre><code>&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/ID_FakturyRow_KontrRow"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:orientation="horizontal"
  &gt;
  
  &lt;CheckBox
      android:id="@+id/ID_FakturyRow_ChckBoxFakturyWybor"
      android:layout_width="30dp"
      android:layout_height="30dp"
      android:focusable="false"
      android:focusableInTouchMode="false"
      android:text=""
      android:textAppearance="?android:attr/textAppearanceSmall"
      android:textSize="10dp"
      true="" /&gt;
  
  &lt;TextView
      android:id="@+id/ID_FakturyRow_NrFakt"
      android:layout_width="120dp"
      android:layout_height="wrap_content"
      android:layout_marginLeft="0dp"
      android:layout_marginRight="5dp"
      android:focusable="false"
      android:maxLength="10"
      android:maxLines="1"
      android:text="NrFakt"
      android:textAppearance="?android:attr/textAppearanceSmall"
      true="" /&gt;
  
  &lt;TextView
      android:id="@+id/ID_FakturyRow_Typ"
      android:layout_width="40dp"
      android:layout_height="wrap_content"
      android:layout_marginLeft="0dp"
      android:layout_marginRight="5dp"
      android:focusable="false"
      android:maxLength="4"
      android:maxLines="1"
      android:text="Typ"
      android:textAppearance="?android:attr/textAppearanceSmall"
      true="" /&gt;
  
  &lt;TextView
      android:id="@+id/ID_FakturyRow_Anulowany"
      android:layout_width="46dp"
      android:layout_height="wrap_content"
      android:layout_marginLeft="10dp"
      android:layout_marginRight="20dp"
      android:maxLength="8"
      android:maxLines="1"
      android:text="Anulowany"
      android:textAppearance="?android:attr/textAppearanceSmall"
      android:focusable="false" /&gt;
  
  &lt;TextView
      android:id="@+id/ID_FakturyRow_Kontrahent"
      android:layout_width="80dp"
      android:layout_height="wrap_content"
      android:layout_marginLeft="0dp"
      android:layout_marginRight="10dp"
      android:maxLength="14"
      android:maxLines="1"
      android:text="Kontrahent"
      android:focusable="false"
      android:textAppearance="?android:attr/textAppearanceSmall" /&gt;
  
  &lt;TextView
      android:id="@+id/ID_FakturyRow_DataSprzed"
      android:layout_width="120dp"
      android:layout_height="wrap_content"
      android:layout_marginLeft="0dp"
      android:layout_marginRight="10dp"
      android:text="Data"
      android:focusable="false"
      android:textAppearance="?android:attr/textAppearanceSmall" /&gt;
  
  &lt;TextView
      android:id="@+id/ID_FakturyRow_Suma"
      android:layout_width="65dp"
      android:layout_height="wrap_content"
      android:layout_marginLeft="10dp"
      android:layout_marginRight="0dp"
      android:maxLines="1"
      android:text="Suma"
      android:focusable="false"
      android:textAppearance="?android:attr/textAppearanceSmall" /&gt;
  
  &lt;TextView
      android:id="@+id/ID_FakturyRow_Miejscowosc"
      android:layout_width="80dp"
      android:layout_height="wrap_content"
      android:layout_marginLeft="10dp"
      android:layout_marginRight="0dp"
      android:text="Miejscowosc"
      android:focusable="false"
      android:textAppearance="?android:attr/textAppearanceSmall" /&gt;
  
  &lt;TextView
      android:id="@+id/ID_FakturyRow_Termin"
      android:layout_width="75dp"
      android:layout_height="wrap_content"
      android:layout_marginLeft="35dp"
      android:layout_marginRight="25dp"
      android:maxLength="18"
      android:maxLines="1"
      android:text="Termin"
      android:focusable="false"
      android:textAppearance="?android:attr/textAppearanceSmall" /&gt;
  
  &lt;TextView
      android:id="@+id/ID_FakturyRow_Wyeksp"
      android:layout_width="70dp"
      android:layout_height="wrap_content"
      android:layout_marginLeft="35dp"
      android:layout_marginRight="0dp"
      android:maxLength="16"
      android:maxLines="1"
      android:text="Wyeksp"
      android:focusable="false"
      android:textAppearance="?android:attr/textAppearanceSmall" /&gt;
  
  &lt;TextView
      android:id="@+id/ID_FakturyRow_Uwagi"
      android:layout_width="40dp"
      android:layout_height="wrap_content"
      android:layout_marginLeft="10dp"
      android:layout_marginRight="0dp"
      android:text="Termin"
      android:focusable="false"
      android:textAppearance="?android:attr/textAppearanceSmall" /&gt;
  </code></pre>
  
  <p>
  listview_layout.xml </p>
  
  <pre><code>&lt;HorizontalScrollView
          xmlns:android="http://schemas.android.com/apk/res/android"
          android:id="@+id/scroller"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:layout_marginBottom="10dp"
          android:fillViewport="true" &gt;
  
          &lt;LinearLayout
              xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/ID_FakturyListaButtons_HeaderLayoutWrapper"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_marginBottom="25dp" 
              android:orientation="vertical" &gt;
  
              ....... // Text Views as Listview header
           &lt;/LinearLayout&gt;
           &lt;RelativeLayout
                  android:id="@+id/ID_FakturyListaButtons_TabListaLayout"
                  android:layout_width="fill_parent"
                  android:layout_height="match_parent"
                  android:orientation="vertical" 
  
                  &gt;
  
                  &lt;ListView
                      xmlns:android="http://schemas.android.com/apk/res/android"
                      android:id="@android:id/android:list"
                      android:layout_width="match_parent"
                      android:layout_height="match_parent"
  
  
                     &gt;
                  &lt;/ListView&gt;
              &lt;/RelativeLayout&gt;
          &lt;/LinearLayout&gt;
   &lt;/HorizontalScrollView&gt; 
  </code></pre>
  
  <p>How can I possibly make that ListView with many columns to display ALL and ONLY items that I clicked?</p>