tutorial studio que bar activity android android-actionbar searchview

android - studio - ¿Cómo descartar/cerrar/contraer SearchView en ActionBar en MainActivity?



search view en android studio (6)

En menu_main.xml agrega:

<item android:id="@+id/action_search" android:icon="@android:drawable/ic_menu_search" android:title="Search" app:showAsAction="collapseActionView|ifRoom" android:orderInCategory="1" app:actionViewClass="android.support.v7.widget.SearchView" android:menuCategory="secondary" />

y en onCreateOptionsMenu

final MenuItem miSearch = menu.findItem(R.id.action_search); SearchView searchView = (SearchView) miSearch.getActionView(); searchView.setQueryHint("Searh For"); searchView.setOnQueryTextListener(newSearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { Toast.makeText(context,query, Toast.LENGTH_LONG).show(); // Here Put Your Code. //searchView.onActionViewCollapsed(); miSearch.collapseActionView(); return false; } @Override public boolean onQueryTextChange(String newText) { return false; } });

Estoy intentando borrar y cerrar SearchView después de ingresar un valor. Encontré una solución pero cierra la búsqueda y no realizaré ninguna acción si trato de buscar nuevamente.

@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main_actions, menu); searchView = (SearchView) menu.findItem(R.id.action_search).getActionView(); searchView.setOnQueryTextListener(searchListener); return super.onCreateOptionsMenu(menu); } SearchView.OnQueryTextListener searchListener = new SearchView.OnQueryTextListener(){ @Override public boolean onQueryTextChange(String arg0) { return false; } @Override public boolean onQueryTextSubmit(String query) { new JsoupGetData("http://api.openweathermap.org/data/2.5/find?q="+ query + "&lang=pl").execute(); try { searchView.onActionViewCollapsed(); } catch(Exception ex){ ex.printStackTrace(); System.out.println(ex); } return true; } };

Solo puedo buscar por primera vez. Cada vez que viene solo cierra mi teclado de entrada y no hace nada. ¿Cómo se puede realizar de manera correcta?

Editar. El cambio sugerido se ve así:

try { searchView.setIconified(true); }

activity_main_actions.xml:

<!-- Search Widget --> <item android:id="@+id/action_search" android:icon="@drawable/ic_action_search" android:title="@string/action_search" android:showAsAction="always" android:actionViewClass="android.widget.SearchView"/>

Edit2:

Cambié showAsAction="always|collapseActionView" pero cierra mi aplicación cuando hago clic en la búsqueda.

También puse al oyente dentro de OnCreateOptionsMenu para ver si cambia algo:

@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main_actions, menu); searchMenuItem = menu.findItem(R.id.action_search); searchView = (SearchView) searchMenuItem.getActionView(); searchView.setOnQueryTextListener(new OnQueryTextListener(){ @Override public boolean onQueryTextChange(String arg0) { return false; } @Override public boolean onQueryTextSubmit(String query) { if (searchMenuItem != null) { boolean closed = searchMenuItem.collapseActionView(); Toast.makeText(getApplicationContext(), "closing: " + closed, Toast.LENGTH_SHORT).show(); } new JsoupGetData("http://api.openweathermap.org/data/2.5/find?q="+ query + "&lang=pl").execute(); return false; } }); return super.onCreateOptionsMenu(menu); }

Y el booleano closed es false , no sé por qué. Leí el documento pero no me dice nada.

Edit3:

He leído demasiado Internet sobre este tema y aún no está claro. El widget de búsqueda se borra, el teclado se oculta y se realiza la acción. El único problema es que la búsqueda no se ha colapsado, por lo que cubre el resto de botones de acción en la barra de acción.

@Override public boolean onQueryTextSubmit(String query) { searchView.setIconified(true); searchView.clearFocus(); new JsoupGetData("http://api.openweathermap.org/data/2.5/find?q="+ query + "&lang=pl").execute(); return false; }

Here leí que collapseActionView () no funcionará, porque mi búsqueda no es una vista sino un widget.


En mi caso llamando a invalidateOptionsMenu(); cierra SearchView


Hola, me enfrenté a un escenario similar y, por lo tanto, creo que esto cambió a un código que debería funcionar.
Espero que esto ayude...:)

@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main_actions, menu); Menu mMenuItem = menu.findItem(R.id.action_search_loc); // take a reference with menue item searchView = (SearchView) mMenuItem.getActionView(); //use that to find searchview searchView.setOnQueryTextListener(searchListener); return super.onCreateOptionsMenu(menu); } SearchView.OnQueryTextListener searchListener = new SearchView.OnQueryTextListener(){ @Override public boolean onQueryTextChange(String arg0) { return false; } @Override public boolean onQueryTextSubmit(String query) { new JsoupGetData("http://api.openweathermap.org/data/2.5/find?q="+ query + "&lang=pl").execute(); try { mMenuItem.collapseActionView(); //this will collapse your search view } catch(Exception ex){ ex.printStackTrace(); System.out.println(ex); } return true; } };


La solución mencionada here es simple y funciona perfectamente.

Básicamente, Call setQuery("", false) y setIconified(true) en SearchView .


Parece que lo que está buscando es una forma de cerrar la barra de búsqueda mediante programación. Desafortunadamente, no hay un método o una solución equivalente para esto. Es posible que ya hayas visto otra publicación que tenía algunas sugerencias, pero no hay una forma real de hacerlo.

Su primera edición anterior que llama a setIconified(true) es la mejor alternativa. Los documentos sugieren que llamar a setIconified(true) debería contraer el widget de búsqueda, borrarlo y eliminarlo del foco si el atributo iconifiedByDefault es verdadero (que es de manera predeterminada, por lo que no veo ningún problema con su activity_main_actions.xml).


Utilizar:

searchMenuItem.collapseActionView();

En lugar de:

searchView.onActionViewCollapsed();

Si está utilizando la AppCompat library , entonces use:

MenuItemCompat.collapseActionView(searchMenuItem);