jak zmienić tekst w Android SearchView

92

Czy istnieje metoda setText () dla SearchView lub coś podobnego? Próbuję ustawić tekst wyszukiwania w searchView w ten sposób, ale nie ma takiej metody.

searchView.setText(searchToken);
Khaled Annajar
źródło

Odpowiedzi:

166

Po zastanowieniu się i wypróbowaniu dowiedziałem się, że w API jest metoda o nazwie setQuery (), dla której ustawiasz tekst searchView i możesz przesłać wyszukiwanie lub nie używać parametru boolean.

searchView.setQuery(searchToken, false);
Khaled Annajar
źródło
3
Nawet po ustawieniu parametru boolean na wartość false, nadal wysyła zapytania. Wszelkie sugestie mogą pomóc.
Raj Trivedi
Zrobiłem to, ale ustawiłem drugi parametr na truetak, aby zapytanie również zostało wykonane, ale zauważ, że chociaż zapytanie zostanie wykonane dobrze, pole tekstowe pozostaje puste, aż do ręcznego ustawienia fokusa. Jak upewnić się, że automatycznie ustawiona wartość jest również wyświetlana automatycznie?
nemesisfixx
1
w porządku. Drugi argument to „
ulegaj
36

Możesz użyć, setQuery()aby zmienić tekst w polu tekstowym.

Jednak setQuery()metoda wyzwala stan fokusu widoku wyszukiwania, więc klawiatura zostanie wyświetlona na ekranie po wywołaniu tej metody.

Aby rozwiązać ten problem, po prostu wywołaj metodę searchView.clearFocus()po setQuery(), aby ją rozogniskować, a klawiatura nie pojawi się na ekranie.

Przykład:

String suggestWord = intent.getDataString();
searchView.setQuery(suggestWord, false);
searchView.clearFocus();
kunemata
źródło
Nie pokazane od czasu zapisu searchView.setIconified (false); pokazać .
lolo_house
8

to działa dla mnie

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

    sItem.expandActionView();
    searchView.setQuery("your text", false);
Wowo Ot
źródło
1
proste, szybkie rozwiązanie ratujące życie!
Eren
7

Jeśli chcesz wstępnie wypełnić SearchViewjakiś tekst searchView.setQuery(text, false), nie zadziała po wyjęciu z pudełka. powodem jest SearchViewrozszerzenie

searchView.onActionViewExpanded()

uzyskać połączenie, które wywołuje searchView.setText("")i czyści każdy ustawiony przez nas tekst.

Rozwiązaniem jest ustawienie detektora Expand i ustawienie tekstu wstępnego po SearchViewrozwinięciu

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
}
Maks
źródło
Świetna odpowiedź. Ale uważaj na searchView.onActionViewExpanded () i searchView.setQuery (), które wyzwalają onQueryTextChange (), jeśli wdrożyłeś searchView.setOnQueryTextListener . Pierwszy wyzwalacz może bardzo dobrze opróżnić łańcuch, który ma być dostarczony do drugiego wyzwalacza.
Bad Loser
0

Jeśli chcesz, aby searchView rozwijał się i można go zmniejszyć z powrotem do ikony po dotknięciu przez użytkownika x (zamknij), sposób jest następujący:

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.

UWAGA: Jeśli rozszerzysz go za pomocą:

searchView.onActionViewExpanded()

searchView nie zmniejszy się z powrotem po dotknięciu przez użytkownika x (zamknij)

Putra Hardjono
źródło