Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何更改android SearchView文本_Android_Searchview - Fatal编程技术网

如何更改android SearchView文本

如何更改android SearchView文本,android,searchview,Android,Searchview,SearchView或类似的东西是否有setText()方法? 我试图像这样设置searchView中的搜索文本,但没有这样的方法 searchView.setText(searchToken); 经过思考和尝试,我发现API中有一个名为setQuery()的方法,您可以设置searchView文本,您可以选择提交搜索,也可以不使用布尔参数 searchView.setQuery(searchToken, false); 您可以使用setQuery()更改文本框中的文本 但是,setQuer

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

searchView.setText(searchToken);

经过思考和尝试,我发现API中有一个名为setQuery()的方法,您可以设置searchView文本,您可以选择提交搜索,也可以不使用布尔参数

searchView.setQuery(searchToken, false);
您可以使用
setQuery()
更改文本框中的文本

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

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

示例:

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

如果你想用一些文本预先填充你的
SearchView
,setQuery(text,false)将无法直接使用。原因是
SearchView
被展开时

searchView.onActionViewExpanded()

get called调用
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
}

这就是我的工作

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

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

如果您希望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不会收缩,即使在设置布尔参数false后,它仍会再次查询。任何建议都会有所帮助。我已经这样做了,但将第二个参数设置为
true
也会执行查询,但请注意,尽管查询执行得很好,文本框仍保持空白,直到手动指定焦点。如何确保自动设置值也自动显示?没关系。第二个参数是“提交”自写入searchView.setIconified(false)以来未显示;简单、快捷的救生解决方案!回答得很好。但是,如果部署了searchView.setOnQueryTextListener,请注意searchView.onActionViewExpanded()和searchView.setQuery()都会触发onQueryTextChange()。第一个触发器很可能会清空即将提供给第二个触发器的字符串。