我正在使用带有填充槽的ListView的筛选器联系人数据包含姓名和号码。筛选联系人姓名并删除电子邮件地址
现在我有两个问题,当我键入文本EditText
这在原来的火灾adapter.getFilter().filter(s.toString())
1)当我输入“AA”后(在我的代码)
我可以看到名首发从'aa'例如aakruti,但在 同时我也能够查看电子邮件地址,我不希望 使它在启动过滤器时可见。
2)当i型 'AA' 后者(在电话的内置联系人列表)
我可以看到的名字从 'AA' 开始例如aakruti
但我错过了一个名字,即SATYA(通过联系 进行搜索,当我在后面输入“aa”时搜索)
这里是我的筛选查询,里面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
};
编辑
到目前为止,我试图访问
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
例如,
[email protected]
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)
所以谁能告诉我怎么可以限制电子邮件地址并只显示名称也只有联系电话号码?
关于电子邮件地址问题,我认为你没有做错任何事情。这可能只是Android联系人的工作方式。如果你真的想排除的电子邮件,那么你可以增加一个条款,你的SQL说类似'buffer.append(”和 “+ ContactsContract.Contacts.FAMILY_NAME +” NOT LIKE '%@%');' – 2012-02-20 20:53:30
@ 1KA以及好吧,因为我在Android搜索,然后我才知道上述重复是因为'加入联系人',但在联系人列表中,我可以看到劳尔Jakson作为一个,所以我怎么能使它成为一个实体就像接触一样 – Hunt 2012-02-21 04:53:29
尝试包括接触ID(_ID)和过滤上,无论是通过代码或使用UNIQUE子句。 – 2012-02-21 22:30:28