Я нашел решение для этого сам.Ниже приведен код, который я сейчас использую.
Я объявил курсор моего запроса в списке контактов как окончательный.и использовал тот же объект курсора внутри метода onClick, чтобы получить запись в позиции, по которой щелкнули, используя moveToPosition()
метод Cursor.Также обратите внимание, что я должен использовать cursor.moveToFirst();
внизу onClick.В противном случае диалоговое окно кажется пустым, когда я снова вызываю его (я не уверен, почему это происходит).
protected Dialog onCreateDialog(int id) {
String[] projection = new String[] {
Phone._ID,
Phone.DISPLAY_NAME,
Phone.NUMBER
};
final Cursor cursor = managedQuery(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
projection, null, null, null);
return new AlertDialog.Builder(ContactActivity.this)
.setTitle("Select Contacts")
.setCursor(cursor,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
/* User clicked on a contact item */
if(cursor.moveToPosition(which)){
long contactId=cursor.getLong(0);
String name=cursor.getString(1);
String number=cursor.getString(2);
Toast.makeText(getApplicationContext(),
"You selected: ["+contactId+"]"
+ name + " , " +number,
Toast.LENGTH_SHORT)
.show();
}
cursor.moveToFirst();//Reset the position
}
}, ContactsContract.Contacts.DISPLAY_NAME)
.create();
}
Но я не чувствую, что это правильный способ сделать это.Так что я не отмечаю это как ответ на этот вопрос.Я оставлю этот вопрос открытым в течение некоторого времени и надеюсь, что кто-то может предложить лучшие предложения.
ОБНОВЛЕНИЕ: Помечено как ответ, поскольку ответа нет.