фильтровать имена контактов и удалять адреса электронной почты - PullRequest
0 голосов
/ 19 февраля 2012

Я использую фильтр с ListView, который заполняется через контактные данные, которые содержат имена и номера.

Теперь у меня есть две проблемы, когда я набираю текст в EditText, который в свою очередь вызывает adapter.getFilter().filter(s.toString())

1) Когда я набираю 'aa' последний (в моем коде)

, я вижу имя, начинающееся с 'aa', например, aakruti, но в то же время я могу просматриватьадреса электронной почты, которые я не хотел, чтобы они были видны при срабатывании фильтра.

enter image description here

2) Когда я набираю 'aa' последний(во встроенном списке контактов телефона)

я могу видеть имя, начинающееся с 'aa', например, aakruti

, но мне не хватает одного имени, то есть SATYA (которое отображается при поиске контактов, когда я набираю 'аа 'последний в него)

enter image description here

вот мой запрос фильтра, внутри runQueryOnBackgroundThread

StringBuilder buffer = null;
String[] args = null;
    if (constraint != null) {
    buffer = new StringBuilder();
    buffer.append("UPPER(");
    buffer.append(ContactsContract.Contacts.DISPLAY_NAME);
    buffer.append(") GLOB ?");
    args = new String[] { constraint.toString().toUpperCase() + "*" };
    }
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
System.out.println(buffer);
return mContent.query(
            ContactsContract.Contacts.CONTENT_URI, 
            projection,
            buffer == null ? null : buffer.toString(), 
            args,sortOrder
);

данные проекции

   public static String[] projection = new String[] {
           ContactsContract.Contacts._ID,
           ContactsContract.Contacts.DISPLAY_NAME

   };

EDIT

До сих пор я пытался получить доступ к

ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME
ContactsContract.CommonDataKinds.StructuredName.MIDDLE_NAME
ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME
ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME

Но GIVEN_NAME отображает немного email address тоже и даженапример, contact name which has email address

,

xyz@gmail.com 
Raul Jakson          (which only has email address no contact number)
Raul Jakson          ( i see this name twice as it has two different email address , but i wanna see it as name )

, поэтому кто-нибудь может сказать мне, как я могу ограничить адреса электронной почты и показывать только Имена, в которых есть только контактные телефоны?

1 Ответ

2 голосов
/ 19 февраля 2012

Во-первых, электронные письма отображаются, потому что у этого контакта нет имени.В этих случаях Android будет использовать электронную почту в качестве отображаемого имени.Чтобы не показывать их, используйте GIVEN_NAME и FAMILY_NAME.См. api docs для StructuredName .

Во-вторых, вы не найдете SATIYA, так как ваш запрос ищет DISPLAY_NAME, который начинается с AA.SATIYA - это не слово, это последовательность инициалов, например, SATIY A. Если вы хотите найти их, вам придётся составить запрос, чтобы удовлетворить это.Вы можете искать * A * A *, но вы, вероятно, получите много других хитов.Я подозреваю, что Android делает какой-то вариант начального поиска + по фамилии, где BO найдет Барака Обаму.

...