title: getItemAtPosition() How to get readable data from the selected item in a ListView
body: <p>I have a listView of contacts that I got from the Android ContactManager sample.  This list is showing up fine, but I can't figure out how to get info from the selected item, like "name" and "phone number".</p>
  
  <p>I can get the selected position, but the result of the mContactList.getItemAtPosition(position) is a ContentResolver$CursorWrapperInner and that doesn't really make any sense to me. I can't get heads or tails from that.</p>
  
  <p>Anyone know how I can get the name/id/phone number from the selected item in the listView? </p>
  
  <p>Here is my code.    </p>
  
  <pre><code>@Override
  public void onCreate(Bundle savedInstanceState)
  {
      Log.v(TAG, "Activity State: onCreate()");
      super.onCreate(savedInstanceState);
      setContentView(R.layout.choose_contact);
  
      // Obtain handles to UI objects
      mAddAccountButton = (Button) findViewById(R.id.addContactButton);
      mContactList = (ListView) findViewById(R.id.contactList);
      mShowInvisibleControl = (CheckBox) findViewById(R.id.showInvisible);
  
      // Initialize class properties
      mShowInvisible = false;
      mShowInvisibleControl.setChecked(mShowInvisible);
      mContactList.setOnItemClickListener(new OnItemClickListener()
      {
        public void onItemClick(AdapterView&lt;?&gt; parent, View view, int position, long id)
        {
         addContactAt(position);
        }
      });
      mShowInvisibleControl.setOnCheckedChangeListener(new OnCheckedChangeListener() {
          public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
              Log.d(TAG, "mShowInvisibleControl changed: " + isChecked);
              mShowInvisible = isChecked;
              populateContactList();
          }
      });
  
      // Populate the contact list
      populateContactList();
  
  }
  
  /**
   * Populate the contact list based on account currently selected in the account spinner.
   */
  private SimpleCursorAdapter adapter;
  private void populateContactList() {
      // Build adapter with contact entries
      Cursor cursor = getContacts();
      String[] fields = new String[] {
              ContactsContract.Data.DISPLAY_NAME
      };
      adapter = new SimpleCursorAdapter(this, R.layout.contact_entry, cursor,
              fields, new int[] {R.id.contactEntryText});
      mContactList.setAdapter(adapter);
  }
  
  /**
   * Obtains the contact list for the currently selected account.
   *
   * @return A cursor for for accessing the contact list.
   */
  private Cursor getContacts()
  {
      // Run query
      Uri uri = ContactsContract.Contacts.CONTENT_URI;
      String[] projection = new String[] {
              ContactsContract.Contacts._ID,
              ContactsContract.Contacts.DISPLAY_NAME
      };
      String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '" +
              (mShowInvisible ? "0" : "1") + "'";
      String[] selectionArgs = null;
      String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
  
      return managedQuery(uri, projection, selection, selectionArgs, sortOrder);
  }
  
  private void addContactAt(int position)
  {
   Object o = mContactList.getItemAtPosition(position);
  }
  </code></pre>
  
  <p>}`</p>