Establecer funcionalidad del botón de retroceso del widget de búsqueda
He implementado el search widget
Android en mi aplicación basada en el navigation drawer
. Lo he configurado para abrir el teclado y enfocar el editText
al hacer clic en el icono de búsqueda. Quiero configurar el botón de retroceso (botón arriba) para ocultar el teclado. He buscado en la web para el R.id
del botón de arriba, y encontré este android.R.id.home
. Así que lo he establecido:
@Override public boolean onOptionsItemSelected(MenuItem item) { ... case android.R.id.home: hideKeyboard(); break; ... }
He depurado el código y noté que al hacer clic en el icono de la navigation bar
dispara el android.R.id.home
, pero al pulsar el botón de arriba del widget de búsqueda ni siquiera ingresa a la función onOptionsItemSelected(MenuItem item)
. También he intentado esto:
- ¿Cuántos ViewStubs son demasiados para un solo archivo XML de presentación?
- Android ScrollView Vs ListView
- Cómo utilizar RenderScript con SurfaceView / View
- El cajón de navegación es lento con vista compleja
- ¿Es posible desactivar el HeaderLayout que se puede hacer clic en NavigationView?
searchView.setOnFocusChangeListener(new OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if (!hasFocus) { hideKeyboard(); } } });
Pero no funcionó.
¿Cómo puedo ocultar el teclado al presionar el botón de retroceso (arriba)?
Configuración de la vista de búsqueda:
private void setSearchView(Menu menu) { // Get the SearchView and set the searchable configuration SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); searchView = (SearchView) menu.findItem(R.id.search).getActionView(); // Assumes current activity is the searchable activity searchView.setSearchableInfo(searchManager .getSearchableInfo(getComponentName())); searchView.setIconifiedByDefault(false); SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() { public boolean onQueryTextChange(String newText) { Home.getFilter().filter(newText); return true; } public boolean onQueryTextSubmit(String query) { return true; } }; searchView.setOnQueryTextListener(queryTextListener); }
- Android está redibujando todas las vistas al aplicar la animación en una vista
- Actividad de búsqueda que no se está iniciando al pulsar Intro
- ¿Por qué las vistas pierden el relleno cuando se establece un backgroundResource de xml?
- ¿Cómo agregar vista como fondo a la superficie?
- Actualizar el menú NavigationView después de cambiar la configuración regional
- ¿Cómo puedo clonar una vista?
- Cómo obtener NoSuchMethodError con métodos TextView
- el enlace de datos; la etiqueta de la vista no es correcta, Android
El código siguiente debería funcionar:
searchView = (SearchView) menu.findItem(R.id.search).getActionView(); searchView.setOnCloseListener(new OnCloseListener() { @Override public bool OnClose() { searchView.clearFocus(); return true; });
Sin embargo esto no funcionó para mí por alguna razón. : – /
He encontrado la solución a continuación:
searchView = (SearchView) menu.findItem(R.id.search).getActionView(); searchView.addOnAttachStateChangeListener(new OnAttachStateChangeListener() { @Override public void onViewDetachedFromWindow(View v) { searchView.clearFocus(); } @Override public void onViewAttachedToWindow(View v) { } });
No creo que el uso de android.R.id.home
funcione ya que creo que onOptionsItemSelected(android.R.id.home)
sólo se llamará una vez que se haya cerrado el SearchView.
- Cómo reducir el tamaño del paquete
- Cómo desarrollar un listview con una columna pegajosa como Google Calendar