98

SearchView 是否有 setText() 方法或类似的方法?我尝试像这样在 searchView 中设置搜索文本,但没有这样的方法。

searchView.setText(searchToken);
4

5 回答 5

182

在想知道并尝试之后,我发现 API 中有一个名为 setQuery() 的方法,您可以设置 searchView 文本,您可以选择提交搜索或不使用布尔参数。

searchView.setQuery(searchToken, false);
于 2013-01-20T16:49:24.067 回答
39

您可以使用setQuery()更改文本框中的文本。

但是,setQuery()该方法会触发搜索视图的焦点状态,因此在调用此方法后会在屏幕上显示一个键盘。

要解决此问题,只需调用searchView.clearFocus()aftersetQuery()方法将其取消焦点,键盘将不会显示在屏幕上。

例子:

String suggestWord = intent.getDataString();
searchView.setQuery(suggestWord, false);
searchView.clearFocus();
于 2014-04-23T15:34:29.440 回答
14

这对我有用

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

    sItem.expandActionView();
    searchView.setQuery("your text", false);
于 2019-04-16T15:28:26.520 回答
8

如果您想预先填写SearchView一些文本searchView.setQuery(text, false),则无法开箱即用。原因是当SearchView扩大

searchView.onActionViewExpanded()

被调用,它调用searchView.setText("")并清除我们设置的任何文本。

SearchView解决方案是设置一个扩展侦听器并在扩展后设置前置文本

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
}
于 2019-02-09T03:12:34.947 回答
-1

如果您希望 searchView 展开并且可以在用户点击 x(关闭)后收缩回图标,方法是:

searchView.isIconified = false // Expand it
searchView.setQuery("your text here", false) // true if you want to submit, otherwise false
searchView.clearFocus() // so the keyboard is not show up.

注意:如果您使用以下方法扩展它:

searchView.onActionViewExpanded()

用户点击 x(关闭)后,searchView 不会缩回

于 2020-04-05T15:12:48.867 回答