public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    Task task = mAdapter.getItem(position);
    CheckedTextView taskDescription = (CheckedTextView) view.findViewById(R.id.task_description);

    task.setCompleted(!task.isCompleted());

    if (task.isCompleted()) {
      taskDescription.setPaintFlags(taskDescription.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
      taskDescription.setChecked(true);
    } else {
      taskDescription.setPaintFlags(
          taskDescription.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
      taskDescription.setChecked(false);
    }

    task.saveEventually();
  }
 @Override
 protected void onListItemClick(ListView l, View v, int position, long id) {
   super.onListItemClick(l, v, position, id);
   Log.i(LOG_TAG, id + " is clicked at position " + position);
   if (v instanceof CheckedTextView) {
     // doing asynchronous view changes, because the cursor still has old data while the database
     // and the view are changed
     // because we force refresh on every resume, the synchronization after we leave the Activity
     // is taken care of
     CheckedTextView ctv = (CheckedTextView) v;
     // this check view at the certain position, rather than the item, hence the asynchrony
     ctv.setChecked(!ctv.isChecked());
     mAdapter.flipCheckedStatus(id, mNoteId, ctv.isChecked());
     ctv.setPaintFlags(
         ctv.isChecked()
             ? ctv.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG
             : ctv.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
     ((HoloNoteCursorAdapter) this.getListAdapter()).getCursor().requery();
   }
 }