¿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.
- Establecer una imagen de fondo en una vista extiende mi vista
- Android - Creación de listview con encabezados flotantes
- Cómo configurar el color de fondo de una vista
- Cómo utilizar múltiples TouchDelegate
- ¿Cómo puedo obtener el punto / coordinar el usuario hizo clic en una vista de Android?
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.
- Menús de desbordamiento de acciones para elementos de una vista de lista
- Android DataBinding dónde obtener el contexto?
- Uso de Javascript en la vista web
- ¿Cuál es la forma más rápida de agregar varias vistas a un LinearLayout?
- El niño especificado ya tiene un error de padre en la vista inflado
- Android obtiene la vista de Preferencia en PreferenciaActividad
- GetLocationOnScreen () vs getLocationInWindow ()
- OnSuggestionClick recrea mi actividad
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();
- ¿Google Analytics rastrea el uso de la aplicación (Android) incluso si el usuario no está conectado a Internet?
- Kotlin uso perezoso