私は 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();
}
}
他の誰かがこの問題を抱えている場合、これが役立つことを願っています.