title: Android: Listview don't save a state of checkbox
body: <p>I check all topic with similar problem, but I stil stay in deadpoint. I have a listview with contact list, but when i scroll down and scroll up listview don't save a state of my choices. All checkboxes was setting on false. When i debug i see, when i scrolled listview, my onClickListener thinking that checkbox was signed and reset this. I do everything, other array with position boolean, etc etc and I still don't know what to do :( I will be very gratefull for any help:)</p>
  
  <pre><code>@Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          readContacts();
          Contact_Database dbhandler = new Contact_Database(
                  getApplicationContext(), null, null, 1);
          numbers.addAll( dbhandler.getAllNumbers());
          System.out.println("onCreate");
          ListView lv = getListView();
          registerForContextMenu(lv);
          lv.setTextFilterEnabled(true);
          lv.clearChoices();
          MyAdapter adapter = (new MyAdapter(this, R.layout.contact_list_sms, contacts));
          adapter.notifyDataSetChanged();
          lv.setAdapter(adapter);
  
      }
  
      /**
       * When I destroy intent i send request to database, faster!
       */
  
      @Override
      protected void onDestroy() {
          super.onDestroy();
          for (int i = 0; i &lt; numbers.size(); ++i)
              System.out.println("@@@@" + numbers.get(i));
  
          swap_contacts();
  
      }
  
  class MyAdapter extends ArrayAdapter&lt;Contact&gt; {
  
          LayoutInflater inflat;
  
          public MyAdapter(Context context, int textViewResourceId,
                  ArrayList&lt;Contact&gt; objects) {
              super(context, textViewResourceId, objects);
              inflat = LayoutInflater.from(context);
              System.out.println("LOLLLLL");
              notifyDataSetChanged();
  
          }
  
          @Override
          public int getItemViewType(int position) {
              return (position == this.getCount() - 1) ? 1 : 0;
          }
  
          @Override
          public int getViewTypeCount() {
              return 2;
          }
  
          // if that contact exist in database? numbers, in onCreate method
          // i init this with saved position from databse
          private boolean exist(String x) {
              for (int i = 0; i &lt; numbers.size(); i++)
                  if (numbers.get(i).compareTo(x) == 0)
                      return true;
              return false;
          }
  
          @SuppressLint("NewApi")
          @Override
          public View getView(int position, View convertView, ViewGroup parent) {
              System.out.println("ROWS !!! -&gt;" + numbers.size());
              ViewHolder holder = null;
              if (convertView == null) {
                  holder = new ViewHolder();
                  convertView = inflat.inflate(R.layout.contact_row, null);
                  holder.textView1 = (TextView) convertView
                          .findViewById(R.id.name);
                  holder.textView2 = (TextView) convertView
                          .findViewById(R.id.number);
                  holder.on_off = (CheckBox) convertView
                          .findViewById(R.id.enable);
                  convertView.setTag(holder);
              } else {
                  holder = (ViewHolder) convertView.getTag();
              }
              Contact it = contacts.get(position);
              Log.v("XXX", holder.toString());
              if (it != null) {
                  holder.textView1.setText(contacts.get(position).name);
                  holder.textView2.setText(contacts.get(position).phone);
                  // update state of checbox from database
                  if (exist(contacts.get(position).phone))
                      holder.on_off.setChecked(true);
                  else
                      holder.on_off.setChecked(false);
              }
  
              final int element_position = position;
  
              holder.on_off
                      .setOnCheckedChangeListener(new OnCheckedChangeListener() {
                          // update list when we click on it
                          @Override
                          public void onCheckedChanged(CompoundButton buttonView,
                                  boolean isChecked) {
                              String nr_telefonu = contacts.get(element_position).phone;
                              if (isChecked) {
                                  numbers.add(nr_telefonu);
                              } else {
                                  numbers.remove(nr_telefonu);
                              }
                          }
                      });
              return convertView;
          }
  
  
          @Override
          public Contact getItem(int position) {
              return contacts.get(position);
          }
  
          private class ViewHolder {
              TextView textView1, textView2;
              CheckBox on_off;
  
              public String toString() {
                  return "-";
              }
          }
      }
  </code></pre>