como alterar o texto do Android SearchView

91

Existe um método setText () para SearchView ou algo parecido? Tento definir o texto de pesquisa no searchView desta forma, mas não há nenhum método para fazer isso.

searchView.setText(searchToken);
Khaled Annajar
fonte

Respostas:

164

Depois de pensar e tentar, descobri que existe um método na API chamado setQuery () no qual você define o texto searchView e pode optar por enviar a pesquisa ou não usando o parâmetro booleano.

searchView.setQuery(searchToken, false);
Khaled Annajar
fonte
3
Mesmo depois de definir o parâmetro booleano false, ele ainda consulta novamente. Qualquer sugestão ajudaria.
Raj Trivedi
Eu fiz isso, mas definindo o segundo parâmetro para trueque a consulta seja executada também, mas observe que, embora a consulta seja bem executada, a caixa de texto permanece em branco, até quando o foco é dado manualmente. Como posso garantir que o valor definido automaticamente também seja exibido automaticamente?
nemesisfixx
1
está certo. o segundo argumento é "enviar"
roghayeh hosseini
33

Você pode usar setQuery()para alterar o texto na caixa de texto.

No entanto, o setQuery()método aciona o estado de foco de uma visualização de pesquisa, portanto, um teclado será exibido na tela após esse método ter sido invocado.

Para corrigir esse problema, basta ligar searchView.clearFocus()depois setQuery()método para desfocar-lo e o teclado não irá mostrar na tela.

Exemplo:

String suggestWord = intent.getDataString();
searchView.setQuery(suggestWord, false);
searchView.clearFocus();
kunemata
fonte
Não mostrado desde a escrita searchView.setIconified (false); mostrar .
lolo_house
7

Se você quiser pré-preencher SearchViewcom algum texto searchView.setQuery(text, false), não funcionará fora da caixa. a razão é quando SearchViewse expande

searchView.onActionViewExpanded()

é chamado o que chama searchView.setText("")e limpa qualquer texto que definimos.

Solução é definir um ouvinte Expandir e definir o texto pré-fil uma vez que o SearchViewé expandido

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
}
Max
fonte
6

Isto é o que funcionou para mim

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

    sItem.expandActionView();
    searchView.setQuery("your text", false);
Uau Ot
fonte
1
solução simples e rápida para salvar vidas!
eren130
0

Se você quiser que o searchView se expanda e possa ser reduzido a um ícone depois que o usuário tocar em x (fechar), o método é:

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.

NOTA: Se você expandir usando:

searchView.onActionViewExpanded()

searchView não diminuirá depois que o usuário tocar em x (fechar)

Putra Hardjono
fonte