我有一个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());
}
}
}
但是使用上面的代码没有删除详细数据。 我的问题是上述任何代码是否缺失或是否不正确?
答案 0 :(得分:0)
您需要使用id
中的AdapterContextMenuInfo
:
long id = menuinfo.id;
现在您正在使用position
,它表示适配器中所选行的位置,而不是该特定行的联系人的id
,因此当您查找与id
你最有可能找不到它。