8

私は 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();
    }
}

他の誰かがこの問題を抱えている場合、これが役立つことを願っています.

4

2 に答える 2

0

おそらくあなたのアプリには適していませんが、単純な を使用してからリスナーEditTextを追加するオプションもあります。TextWatcherこのようにして、ユーザーが空の文字列を入力した場合でも、すべての入力をキャッチします。

于 2014-09-24T15:48:33.390 に答える