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);

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);

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();

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);

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
}

Ś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)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.