Я думаю, что лучший способ добиться «автокликирования» - через интерфейс textwatcher:
http://developer.android.com/reference/android/text/TextWatcher.html
Примерно так:
EditText.addTextChangedListener(...)
afterTextChanged(Editable s)
{
//Make your query here using s.getText().toString
//as your WHERE-Clause
}
Я бы посоветовал вам выполнить отладку при использовании TextWatcher только для того, чтобы понять, как он работает;) Вам также следует учитывать, что этот метод может занимать много памяти, поскольку вы запрашиваете в своей базе данных каждую напечатанную букву.Вы можете посчитать набранные буквы в
onTextChanged(CharSequence s, int start, int before, int count)
и установить логическое значение в true, когда пользователь набрал более 2 букв и начать запрашивать вашу БД, чтобы избежать чрезмерного использования памяти.
Редактировать:
Это оригинальный метод поиска:
public void search(View view) {
// || is the concatenation operation in SQLite
cursor = db.rawQuery("SELECT _id, firstName, lastName, title FROM employee WHERE firstName || ' ' || lastName LIKE ?",
new String[]{"%" + searchText.getText().toString() + "%"});
adapter = new SimpleCursorAdapter(
this,
R.layout.employee_list_item,
cursor,
new String[] {"firstName", "lastName", "title"},
new int[] {R.id.firstName, R.id.lastName, R.id.title});
employeeList.setAdapter(adapter);
}
Теперь попробуйте это так:
searchText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
afterTextChanged(Editable s){
// || is the concatenation operation in SQLite
cursor = db.rawQuery("SELECT _id, firstName, lastName, title FROM employee WHERE firstName || ' ' || lastName LIKE ?",
new String[]{"%" + s.getText().toString() + "%"});
adapter = new SimpleCursorAdapter(
this,
R.layout.employee_list_item,
cursor,
new String[] {"firstName", "lastName", "title"},
new int[] {R.id.firstName, R.id.lastName, R.id.title});
employeeList.setAdapter(adapter);
}
});
Есть некоторые пробелы вкод, который вы должны заполнить самостоятельно.Но это основная идея моего первого поста.