¿Cómo puedo recuperar el botón de trabajo cuando searchview en Android

Hola a todos 🙂 He estado buscando durante más de 4 horas por todo el Internet cómo conseguir el botón de vuelta trabajando correctamente cuando se abre el searchview, pero no puedo lograrlo.

Esta es mi vista de búsqueda.

searchview = (SearchView) findViewById(R.id.searchView); searchview.setOnClickListener(this); @Override public void onClick(View v) { if (v.getId() == R.id.searchView){ //Cursor cursor = manager.obtenerIDColumnaServicio(searchview.getQuery().toString()); adapterOfDataBase.changeCursor(cursor); } } 

Aquí está el xml:

  <SearchView android:layout_width="match_parent" android:layout_height="63dp" android:id="@+id/searchView" android:iconifiedByDefault="true" android:backgroundTint="#ff000000" android:layout_marginRight="0dp" /> 

Todo esto con una gran clase utilizando SQL y algunos métodos para insertar, eliminar, etc etc tablas y entradas. Así que mi problema es que cada vez que haga clic en el searchview que se expande con el fin de escribir el texto, everyting ok, pero cuando vuelvo a pulsar el botón de android nada sucede.

Probé dos opciones pero ninguna funcionó, si pudieras solo ayudarme …

 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { //MEJORAR ESTO if (keyCode == KeyEvent.KEYCODE_BACK) { searchview.onActionViewCollapsed(); return true; } return super.onKeyDown(keyCode, event); } //None of this 2 methods are working. I tried them separately @Override public void onBackPressed(){ if (!this.searchview.isIconified()) { this.searchview.setIconified(true); } else { super.onBackPressed(); } } 

Si necesitas más código para ayudarme, te lo daré. Gracias a todos.

Cuando searchView está abierto y se pulsa el botón "back", se espera ver el searchView cerrado (aka setIconified (true)) Este es un comportamiento estándar según la implementación de búsqueda de google apps.

Así que todo lo que necesitas hacer es algo así

  mSearchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if (!hasFocus) { mSearchView.setIconified(true); } } }); 

En mi caso sólo añadiendo:

 setFocusableInTouchMode(true); 

al SearchView funciona como un trabajo alrededor para este problema,

Espero eso ayude,

Intente utilizar OnActionExpandListener en MenuItem

 @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu_search, menu); SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); MenuItem searchItem = menu.findItem(R.id.search); SearchView searchView = null; if (searchItem != null) { searchView = (SearchView) searchItem.getActionView(); } if (searchView != null) { searchView.setSearchableInfo(searchManager.getSearchableInfo(MainActivity.this.getComponentName())); } searchItem.setOnActionExpandListener(new MenuItem.OnActionExpandListener() { @Override public boolean onMenuItemActionExpand(MenuItem item) { return true; } @Override public boolean onMenuItemActionCollapse(MenuItem item) { // TODO do your stuff when back button is pressed return true; } }); return super.onCreateOptionsMenu(menu); } 

En caso de utilizar AppCompatSupportv7

 MenuItemCompat.setOnActionExpandListener(searchItem, new MenuItemCompat.OnActionExpandListener() { @Override public boolean onMenuItemActionExpand(MenuItem item) { return true; } @Override public boolean onMenuItemActionCollapse(MenuItem item) { // TODO do your stuff when back button is pressed return true; } }); 

en lugar de this.searchview.setIconified (true) intente esto si está utilizando la biblioteca de soporte:

 searchview.onActionViewCollapsed(); supportInvalidateOptionsMenu(); 

o esto si no está usando la biblioteca de soporte:

 searchview.onActionViewCollapsed(); invalidateOptionsMenu(); 
  • Android Multiple SurfaceViews
  • Cómo configurar el adaptador para searchview en la barra de acciones
  • Android searchVer no en actionBar eliminar foco
  • Android SurfaceView onDraw Pregunta
  • Cómo mover un contenido de diseño fuera de la pantalla de Android
  • ¿Cómo puedo pasar variables extra durante una búsqueda invocada por un SearchView / Widget?
  • El cajón de navegación es lento con vista compleja
  • Ocultar búsqueda / ir botón en el teclado virtual cuando se utiliza la búsqueda?
  • Android: superposición en la ventana sobre las actividades de una tarea
  • El onQueryTextSubmit en SearchView se procesa dos veces en Android Java
  • View.onMeasure () no se llama
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.