Я реализовал функцию автозаполнения, чтобы позволить пользователю начать вводить контакт и чтобы этот контакт отображался в раскрывающемся списке с помощью autoCompleteTextView, так же, как он работает при выборе контактов для сообщений или сообщений электронной почты.
Поскольку я не хочу, чтобы переменная содержала все контакты сразу, поскольку она может быть очень большой, я заполнил свой ArrayList, когда пользователь вводит буквы в поле контакта.
Янастроить его так: - peopleList = new ArrayList> ();
adapter = new SimpleAdapter(this, peopleList, R.layout.customcontcell ,new String[] { "Name", "Phone" , "Type" }, new int[] { R.id.ccontName, R.id.ccontNo, R.id.ccontType });
txtPhoneNo.setAdapter(adapter);
Затем, когда пользователь начинает вводить имя, он берет все строки из контактов, которые соответствуют этому, это делается в моей функции«QueryContacts» выглядит так: -
selectionWhere = ContactsContract.Contacts.DISPLAY_NAME+" LIKE '" + name + "%'";
//Cursor to retrive contact details.
Cursor people = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, selectionWhere, null, null);
Этот курсор затем используется для заполнения моего peopleList, который используется адаптером.
В этом состоянии он работает, однако без некоторых проверокПриведенный выше код в конечном итоге извлекает ВСЕ контакты (так как имя не вводится, поэтому он ничего не фильтрует) и выполняется каждый раз, когда набирается новая буква.Это нервный и медленный процесс.
Поэтому я хотел поставить несколько простых проверок, чтобы ограничить его извлечением контактов только после ввода 2 букв, и не получать больше, если оно не идет ниже 2 букв, а затем снова возвращается к 2.
Итак, к моим функциям QueryContacts я добавляю: -
if(name.length() < 2)
mGotContacts = false;
//If the length is two letters long and we haven't queried already, query for the name.
if(name.length() == 2 && mGotContacts == false)
{
// Cursor code
// Populate list with cursor data.
}
Теперь проблема в том, что autocompleteTextView больше не падает, я проверил, и переменная peopleLists, которая заполнила мой SimpleAdapter, корректно обновляется,
Итак, я делаю это глупо?Должен ли я просто собрать все данные за один раз и позволить фильтру AutoCompleteTextView их отфильтровать?
Это лучший способ сделать это, и почему он больше не работает с этими проверками в моей функции QueryContacts?