web-dev-qa-db-ja.com

変更方法Android SearchViewテキスト

SearchView用のsetText()メソッドなどがありますか? searchViewで検索テキストをこのように設定しようとしましたが、このような方法はありません。

searchView.setText(searchToken);
82
Khaled Annajar

疑問に思って試してみたところ、searchViewテキストを設定するsetQuery()という名前のメソッドがAPIにあることがわかりました。ブールパラメーターを使用しないか、検索を送信するかを選択できます。

searchView.setQuery(searchToken, false);
153
Khaled Annajar

setQuery()を使用して、テキストボックス内のテキストを変更できます。

ただし、setQuery()メソッドは検索ビューのフォーカス状態をトリガーするため、このメソッドが呼び出されるとキーボードが画面に表示されます。

この問題を解決するには、searchView.clearFocus()メソッドの後にsetQuery()メソッドを呼び出してフォーカスを解除すると、キーボードが画面に表示されなくなります。

例:

String suggestWord = intent.getDataString();
searchView.setQuery(suggestWord, false);
searchView.clearFocus();
27
kunemata

SearchViewにテキストを事前に入力する場合、searchView.setQuery(text, false)はそのままでは機能しません。その理由は、SearchViewが展開されるときです

searchView.onActionViewExpanded()

searchView.setText("")を呼び出して、設定したテキストをすべてクリアします。

解決策は、SearchViewが展開されたら、Expandリスナーを設定し、pre-filテキストを設定することです

override fun onCreateOptionsMenu(menu: Menu): Boolean {
    menuInflater.inflate(R.menu.main, menu)
    val searchView = menu.findItem(R.id.action_search).actionView as SearchView
    menu.findItem(R.id.action_search).setOnActionExpandListener(object : MenuItem.OnActionExpandListener {
        override fun onMenuItemActionExpand(item: MenuItem?): Boolean {
            // it is important to call this before we set our own query text.
            searchView.onActionViewExpanded()
            searchView.setQuery("Prefil Text", false)
            return true
        }

        override fun onMenuItemActionCollapse(item: MenuItem?) = true
    })
    return true
}
4
Max

これは私のために働いたものです

    MenuItem sItem = menu.findItem(R.id.search);
    SearchView searchView = (SearchView) sItem.getActionView();

    sItem.expandActionView();
    searchView.setQuery("your text", false);
3
Wowo Ot