如何删除Android中的联系人?

时间:2012-05-17 11:50:30

标签: android android-contacts android-contentprovider android-menu android-context

我有一个listview,我打电话给registerForContextMenu。在ContextMenu我只有一个菜单是“删除联系人”。下面是单击删除菜单时的代码:

public boolean onContextItemSelected(MenuItem item)
{
    switch (item.getItemId()) 
    {
    case DELETE_ID:
        AdapterView.AdapterContextMenuInfo menuinfo;
        menuinfo = (AdapterContextMenuInfo)item.getMenuInfo();
        int id = menuinfo.position;
        delete(id);
        return true;
    }
    return super.onContextItemSelected(item);
    }


 private void delete(int id)
{
    ContentResolver cr = getContentResolver();
    Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,
        null, ContactsContract.Contacts._ID + "=" + id, null, null);
    while (cur.moveToNext()) {
        try{
            String lookupKey = cur.getString(cur.getColumnIndex(
                ContactsContract.Contacts.LOOKUP_KEY));
            Uri uri = Uri.withAppendedPath(ContactsContract.
                Contacts.CONTENT_LOOKUP_URI, lookupKey);
            System.out.println("The uri is " + uri.toString());
            cr.delete(uri, ContactsContract.Contacts._ID + "=" + id, null);
        }
    catch(Exception e)
    {
        System.out.println(e.getStackTrace());
    }
        }
}

但是使用上面的代码没有删除详细数据。 我的问题是上述任何代码是否缺失或是否不正确?

1 个答案:

答案 0 :(得分:0)

您需要使用id中的AdapterContextMenuInfo

long id = menuinfo.id;

现在您正在使用position,它表示适配器中所选行的位置,而不是该特定行的联系人的id,因此当您查找与id你最有可能找不到它。