Wie schließe ich eine SearchView programmgesteuert?
Lesezeit: 5 Minuten
Tim
Ich habe derzeit eine SearchView in der Aktionsleiste meiner App. Wenn ich auf das Suchsymbol klicke, wird die SearchView erweitert und die Tastatur erscheint wie erwartet. Klicken Sie auf das “X” in der SearchView Box schließt die SearchView wie erwartet. Wenn jedoch die SearchView aktiviert ist und ich den “Zurück”-Button drücke, wird meine App beendet. Dies ist das richtige Verhalten, aber was ich jetzt versuche, ist, das Drücken der Zurück-Taste zu erfassen und es einfach schließen zu lassen SearchView (nicht meine App) wenn die SearchView ist sichtbar. Gibt es eine Möglichkeit, die aufzurufen SearchViewOnCloseListener() programmgesteuert bei einem Zurück-Tastendruck? Zum Beispiel so etwas:
// On a back button press, if we are currently searching,
// close the SearchView. Otherwise, invoke normal back button
// behavior.
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (isSearchViewVisible) {
SearchView searchView = (SearchView) menu.findItem(R.id.searchBox)
.getActionView();
// This method does not exist
searchView.invokeClose();
return true;
}
}
return super.onKeyDown(keyCode, event);
}
stackoverflow.com/a/46930606/1308990
– oiyio
25. Oktober 2017 um 10:58 Uhr
Basierend auf der Antwort von @MarcinOrlowski können Sie auch Folgendes verwenden:
@Override
public void onBackPressed() {
if (!searchView.isIconified()) {
searchView.setIconified(true);
} else {
super.onBackPressed();
}
}
Wichtig, die obige Lösung funktioniert nicht, wenn Sie app:showAsAction=”always” eingestellt haben.
– BenutzerK
12. Juni 2017 um 15:47 Uhr
Achten Sie darauf, searchView.setQuery(“”, false) festzulegen; um searchView.setIconified(true) zu machen; arbeiten
– Pushan
3. Januar 2018 um 10:08 Uhr
mit searchView.setQuery(“”, false); vor searchView.setIconified(true); funktionierte für mich, auch wenn Sie 2 aufeinanderfolgende searchView.setIconified(true) setzen; hat bei mir funktioniert.
Bei Bedarf können Sie die Aktionsansicht in Ihrem eigenen Code erweitern oder reduzieren, indem Sie expandActionView() und collapseActionView() für das MenuItem aufrufen.
Danke für die Antwort! Was mich jedoch hauptsächlich interessiert, ist, ob es eine Möglichkeit gibt, das Close-Ereignis einer SearchView programmgesteuert aufzurufen, dh ein SearchView-Feld “X” im Code zu imitieren.
– Tim
6. Juli 2013 um 19:28 Uhr
Danke für all die Hilfe Marcin. Es stellte sich heraus, dass ich eigentlich meine Suchaktionsansicht “ikonifizieren” wollte (meine Suchansicht befindet sich immer in der Aktionsleiste und wird nie in das Optionsmenü eingeblendet). Vielen Dank, dass Sie sich die Zeit genommen haben, mir zu helfen, und danke für den Tipp zum Überschreiben von „onBackPressed“.
– Tim
6. Juli 2013 um 22:26 Uhr
Bei mir heißt onBackPressed nicht. welche andere Lösung habe ich? Ich habe versucht, den Fokus auf die Suchansicht zu hören, aber das heißt auch nicht.
– Ionut Negru
15. Januar 2014 um 21:12 Uhr
Sie erwarten nicht onBackPressed() außerhalb von Activity (dh in Fragment), nicht wahr?
– Marcin Orlowski
15. Januar 2014 um 21:38 Uhr
Für mich wird onBackPressed überhaupt nicht aufgerufen. Es scheint, dass die Suchansicht tatsächlich die hintere Presse auffrisst und damit umgeht. Zum Beispiel sehe ich, dass onMenuItemActionViewCollapsed() aufgerufen wird, aber onBackPressed nicht aufgerufen wird. Wie kann ich das überschreiben? Ich habe sogar versucht, einen Key Listener in der Suchansicht festzulegen, und es funktioniert immer noch nicht.
– Ashok SoThree
25. April 2014 um 21:27 Uhr
DoruChidean
wenn Sie Eingaben zu Ihrer Suchansicht haben
mSearchView.setIconified(true);
löscht nur den Text.
Die richtige Methode zum Schließen einer searchView ist
mSearchView.onActionViewCollapsed();
Danke für die Antwort! Was mich jedoch hauptsächlich interessiert, ist, ob es eine Möglichkeit gibt, das Close-Ereignis einer SearchView programmgesteuert aufzurufen, dh ein SearchView-Feld “X” im Code zu imitieren.
– Tim
6. Juli 2013 um 19:28 Uhr
Danke für all die Hilfe Marcin. Es stellte sich heraus, dass ich eigentlich meine Suchaktionsansicht “ikonifizieren” wollte (meine Suchansicht befindet sich immer in der Aktionsleiste und wird nie in das Optionsmenü eingeblendet). Vielen Dank, dass Sie sich die Zeit genommen haben, mir zu helfen, und danke für den Tipp zum Überschreiben von „onBackPressed“.
– Tim
6. Juli 2013 um 22:26 Uhr
Bei mir heißt onBackPressed nicht. welche andere Lösung habe ich? Ich habe versucht, den Fokus auf die Suchansicht zu hören, aber das heißt auch nicht.
– Ionut Negru
15. Januar 2014 um 21:12 Uhr
Sie erwarten nicht onBackPressed() außerhalb von Activity (dh in Fragment), nicht wahr?
– Marcin Orlowski
15. Januar 2014 um 21:38 Uhr
Für mich wird onBackPressed überhaupt nicht aufgerufen. Es scheint, dass die Suchansicht tatsächlich die hintere Presse auffrisst und damit umgeht. Zum Beispiel sehe ich, dass onMenuItemActionViewCollapsed() aufgerufen wird, aber onBackPressed nicht aufgerufen wird. Wie kann ich das überschreiben? Ich habe sogar versucht, einen Key Listener in der Suchansicht festzulegen, und es funktioniert immer noch nicht.
– Ashok SoThree
25. April 2014 um 21:27 Uhr
vishalsehgal
Keine Notwendigkeit zu verwenden onBackPressed() Methode dafür!! Ich habe die Lösung gefunden, nur wie ich es unten erwähnt habe, damit der SearchView selbst das handhabt beim Drücken der Zurück-Taste Veranstaltung.
stackoverflow.com/a/46930606/1308990
– oiyio
25. Oktober 2017 um 10:58 Uhr