¿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(); 
  • Clone textview para anexarlo a un ViewGroup
  • ¿Es posible desactivar el HeaderLayout que se puede hacer clic en NavigationView?
  • ¿Es posible usar inflador de vista para inflar artículos individuales?
  • La sugerencia de SearchView no funciona con un carácter
  • Cómo configurar el adaptador para searchview en la barra de acciones
  • Problema: el niño especificado ya tiene un padre. Debe llamar a removeView () en el padre del niño primero
  • Android: mapa de bits de una vista de gran tamaño
  • ¿Cómo agrego un botón a una clase "extends View"?
  • Android: alinear el centro de la vista con el de otra vista
  • Fragmentos y problemas con la pantalla giratoria
  • 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.