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.

  • Cómo obtener la entrada de searchview a textview
  • Android Color de fondo cambiado al azar
  • Diferencia entre findViewById (R.id.content) y getRootView ()
  • SearchView es nulo Android
  • Cómo obtener la vista anterior o siguiente
  • Error de IndexOutOfBoundsException de Android para la vista de lista de filtros de búsqueda
  • SearchView gana el foco y abre el teclado cuando regresa de otra actividad
  • Android DataBinding dónde obtener el contexto?
  • Android scrollview no se llena la vista de los padres
  • Vista de Android establecida en Visible y Gone en el mismo método OnClick, View nunca mostrando Visible
  • Cómo resaltar el texto filtrado mientras se usa el widget SearchView en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.