title: android checkable listview
body: <p>I am quite new in developing android applications.
  I have created my own list adapter as show below and I want that list to be checkable.  What do I have to do so that my list contains a checkbox for each row?</p>
  
  <pre><code>public class listAvtivity extends ListActivity {
  private LayoutInflater mInflater;
  private Vector&lt;RowData&gt; data;
  RowData rd;
  static final String[] title = new String[] {
          "*New*Apple iPad Wi-Fi (16GB)", "7 Touch Tablet -2GB Google Android",
  "Apple iPad Wi-Fi (16GB) Rarely Used ","Apple iPad Wi-Fi (16GB) AppleCase"      };
  static final String[] detail = new String[] {
          "1h 37m Shipping: $10.00","1h 39m Shipping: Free","58m 6s Shipping:$10.00","59m 30s Shipping: $10.95"   };
  //private Integer[] imgid = {
   // R.drawable.bsfimg,R.drawable.bsfimg4,R.drawable.bsfimg2,
   // R.drawable.bsfimg5
  //};
  @Override
  public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  mInflater = (LayoutInflater) getSystemService(
  Activity.LAYOUT_INFLATER_SERVICE);
  data = new Vector&lt;RowData&gt;();
  for(int i=0;i&lt;title.length;i++){
  try {
      rd = new RowData(i,title[i],detail[i]);
      } catch (ParseException e) {
          e.printStackTrace();
     }
     data.add(rd);
  }
     CustomAdapter adapter = new CustomAdapter(this, R.layout.list,
                                       R.id.title, data);
     setListAdapter(adapter);
     getListView().setTextFilterEnabled(true);
  }
     public void onListItemClick(ListView parent, View v, int position,
                                                                  long id) {
     Toast.makeText(getApplicationContext(), "You have selected "
                      +(position+1)+"th item",  Toast.LENGTH_SHORT).show();
  }
         private class RowData {
         protected int mId;
         protected String mTitle;
         protected String mDetail;
         RowData(int id,String title,String detail){
         mId=id;
         mTitle = title;
         mDetail=detail;
      }
         @Override
         public String toString() {
                 return mId+" "+mTitle+" "+mDetail;
         }
  }
    private class CustomAdapter extends ArrayAdapter&lt;RowData&gt; {
    public CustomAdapter(Context context, int resource,
                          int textViewResourceId, List&lt;RowData&gt; objects) {
   super(context, resource, textViewResourceId, objects);
  }
        @Override
         public View getView(int position, View convertView, ViewGroup parent) {
         ViewHolder holder = null;
         TextView title = null;
         TextView detail = null;
         //ImageView i11=null;
         RowData rowData= getItem(position);
         if(null == convertView){
              convertView = mInflater.inflate(R.layout.list, null);
              holder = new ViewHolder(convertView);
              convertView.setTag(holder);
   }
               holder = (ViewHolder) convertView.getTag();
               title = holder.gettitle();
               itle.setText(rowData.mTitle);
               detail = holder.getdetail();
               detail.setText(rowData.mDetail);
               //i11=holder.getImage();
               //i11.setImageResource(imgid[rowData.mId]);
               return convertView;
  }
              private class ViewHolder {
              private View mRow;
              private TextView title = null;
              private TextView detail = null;
              //private ImageView i11=null;
              public ViewHolder(View row) {
              mRow = row;
   }
           public TextView gettitle() {
               if(null == title){
                   title = (TextView) mRow.findViewById(R.id.title);
                  }
              return title;
           }
           public TextView getdetail() {
               if(null == detail){
                    detail = (TextView) mRow.findViewById(R.id.detail);
                      }
             return detail;
           }
          //public ImageView getImage() {
            //   if(null == i11){
              //      i11 = (ImageView) mRow.findViewById(R.id.img);
                //                        }
                  //return i11;
          //}
       }
     } 
  }
  </code></pre>