как изменить текст SearchView для Android

92

Есть ли метод setText () для SearchView или что-то в этом роде? Я пытаюсь установить текст для поиска в searchView таким образом, но для этого нет метода.

searchView.setText(searchToken);
Халед Аннаджар
источник

Ответы:

165

Поразмыслив и попробовав, я обнаружил, что в API есть метод с именем setQuery (), в котором вы устанавливаете текст searchView, и вы можете выбрать, отправлять поиск или не использовать логический параметр.

searchView.setQuery(searchToken, false);
Халед Аннаджар
источник
3
Даже после установки логического параметра false он все равно запрашивает снова. Любые предложения помогут.
Радж Триведи
Я сделал это, но установил второй параметр trueтаким образом, чтобы запрос также выполнялся, но обратите внимание, что, хотя запрос выполняется хорошо, текстовое поле остается пустым до тех пор, пока не будет установлен фокус вручную. Как обеспечить автоматическое отображение автоматически установленного значения?
nemesisfixx 06
1
все нормально. второй аргумент - «представить»
roghayeh hosseini
35

Вы можете использовать setQuery()для изменения текста в текстовом поле.

Однако setQuery()метод запускает состояние фокуса представления поиска, поэтому клавиатура будет отображаться на экране после вызова этого метода.

Чтобы решить эту проблему, просто вызовите метод searchView.clearFocus()после, setQuery()чтобы расфокусировать его, и клавиатура не будет отображаться на экране.

Пример:

String suggestWord = intent.getDataString();
searchView.setQuery(suggestWord, false);
searchView.clearFocus();
кунема
источник
Не показывать с момента записи searchView.setIconified (false); шоу .
lolo_house
8

это то, что сработало для меня

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

    sItem.expandActionView();
    searchView.setQuery("your text", false);
Wowo Ot
источник
1
простое и быстрое решение для спасения жизни!
Эрен
7

Если вы хотите предварительно заполнить SearchViewтекст каким-либо текстом searchView.setQuery(text, false), из коробки не получится. причина в том, когда SearchViewрасширяется

searchView.onActionViewExpanded()

get, который вызывает searchView.setText("")и очищает любой текст, который мы установили.

Решение состоит в том, чтобы установить прослушиватель Expand и установить предварительно заполненный текст после 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
}
Максимум
источник
Отличный ответ. Но остерегайтесь searchView.onActionViewExpanded () и searchView.setQuery () как инициирующее onQueryTextChange () , если вы установили searchView.setOnQueryTextListener . Первый триггер вполне может очистить строку, которая будет передана второму триггеру.
Плохой неудачник
0

Если вы хотите, чтобы 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()

searchView не сжимается после нажатия пользователем x (закрыть)

Putra Hardjono
источник