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:

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

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.

  • En Android: ¿Cómo definir la animación adecuada para maximizar una vista mientras se minimizan otros 2 al mismo tiempo?
  • Escala adaptarse a contenido web móvil utilizando meta tag de vista
  • Cómo mover un contenido de diseño fuera de la pantalla de Android
  • View.getDrawingCache () sólo funciona una vez
  • No se puede importar android.support.design.widget.NavigationView
  • Modificación de atributos anidados en un Layout incluido
  • Menús dinámicos en NavigationView
  • Acceso a TextView desde otra clase
  • Establecer márgenes en un LinearLayout programáticamente
  • Cómo cambiar android SearchView text
  • WebView no se dibuja, WARN / webcore (5336): No se puede obtener la viewWidth después del primer diseño
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.