我有一些聯繫人自動完成和自動搜索算法爲我的Android應用程序工作。 首先是一些XML來定義爲輸入文本視圖:Android TextView自動完成和自動搜索
<AutoCompleteTextView
a:id="@+id/recipientBody"
a:layout_width="0dip"
a:layout_height="wrap_content"
a:layout_weight="1.0"
a:nextFocusRight="@+id/smsRecipientButton"
a:hint="@string/sms_to_whom"
a:maxLines="10"
/>
現在我設置文本視圖
AutoCompleteTextView recip =
(AutoCompleteTextView) findViewById(R.id.recipientBody);
ArrayAdapter<String> adapter =
new ArrayAdapter<String>(this, R.layout.list_item, getAllContacts());
recip.setAdapter(adapter);
而現在實際的算法搜索與輸入相匹配的聯繫人:
private List<String> getAllContacts() {
List<String> contacts = new ArrayList<String>();
ContentResolver cr = getContentResolver();
Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
if (cursor.getCount() > 0) {
while (cursor.moveToNext()) {
String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
String displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
if (Integer.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
Cursor pCursor = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",
new String[]{contactId}, null);
while (pCursor.moveToNext()) {
String phoneNumber = pCursor.getString(pCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
contacts.add(phoneNumber + " (" + displayName + ")");
}
pCursor.close();
}
}
}
return contacts;
}
這適用於聯繫號碼和姓名輸入。但仍然存在問題。用戶可以輸入多個電話號碼。但是當一個聯繫人應用於文本視圖時,它不能再搜索,因爲算法採用整個字符串。
我該如何解決這個問題?