Я пытаюсь использовать SearchView, и у меня все работает, за исключением случаев, когда я хочу найти пустую строку.
onQueryTextChange реагирует, когда я удаляю последний символ, но я хочу, чтобы пользователь мог нажать кнопку кнопку поиска, когда поле поиска пусто.
final SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextChange(String newText) {
// Do something
return true;
}
@Override
public boolean onQueryTextSubmit(String query) {
// Do something
return true;
}
};
searchView.setOnQueryTextListener(queryTextListener);
Я также пытался использовать OnKeyListner. но, похоже, это тоже не работает.
searchView.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(View arg0, int arg1, KeyEvent arg2) {
//Do something
return true;
}
});
Это кажется такой простой задачей, но я не могу заставить ее работать. Какие-либо предложения?
Изменить
Я некоторое время искал решение, и всего через несколько минут после публикации я нашел решение.
В этой ветке я узнал, что это не ошибка, а на самом деле это было преднамеренно.
Android SearchView.OnQueryTextListener OnQueryTextSubmit не запускается для пустой строки запроса
Поэтому я только что скачал ActionBarSherlock и внес некоторые изменения в метод onSubmitQuery().
От
private void onSubmitQuery() {
CharSequence query = mQueryTextView.getText();
if (query != null && TextUtils.getTrimmedLength(query) > 0) {
if (mOnQueryChangeListener == null
|| !mOnQueryChangeListener.onQueryTextSubmit(query.toString())) {
if (mSearchable != null) {
launchQuerySearch(KeyEvent.KEYCODE_UNKNOWN, null, query.toString());
setImeVisibility(false);
}
dismissSuggestions();
}
}
}
И измененная версия
private void onSubmitQuery() {
CharSequence query = mQueryTextView.getText();
if(query == null) {query = "";}
if (mOnQueryChangeListener == null
|| !mOnQueryChangeListener.onQueryTextSubmit(query.toString())) {
if (mSearchable != null) {
launchQuerySearch(KeyEvent.KEYCODE_UNKNOWN, null, query.toString());
setImeVisibility(false);
}
dismissSuggestions();
}
}
Надеюсь, это поможет, если у кого-то еще есть эта проблема.