我正在使用帶有填充槽的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