No se puede obtener android.support.v7.widget.SearchView para aceptar el texto
Después de horas de intentar conseguir un SearchView de la ayuda en mi barra de herramientas de la ayuda para trabajar correctamente (aparece, muestra el texto de la indirecta pero rechaza aceptar el texto), tengo que dar vuelta a usted.
He buscado en Google por horas, leí MUCHAS respuestas aquí y en otros sitios, he comprobado una gran cantidad de documentación y un blog específico que trata sobre el tema, pero no puedo aislar el problema.
- Problemas de procesamiento No se pudo resolver resource @ id / search_edit_frame
- Android: haga que la barra de búsqueda completa pueda hacer clic
- Ejemplo de android.support.v4.widget.SearchViewCompat?
- Crear "historial" en SearchView en ActionBar
- Android SearchView onclick
Como he dicho, estoy utilizando las versiones de soporte de SearchView y Toolbar y también MenuItemCompat. Además, ActionBarActivity. Me aseguré de que siguió todos los pasos religiosamente ( este post del blog tenía mucho que decir sobre el tema, incluso los errores en la documentación oficial).
He definido el archivo AndroidManifest.xml correctamente, tengo un searchable.xml que, por lo que entiendo, se hace referencia correctamente (quiero decir, el texto de la pista aparece normalmente en el campo SearchView), tengo una actividad de resultados de búsqueda con Un filtro de intención android.intent.action.SEARCH establecido en el manifiesto.
Aún nada. Estoy honestamente perplejo aquí.
Aquí está onCreateOptionsMenu () de la actividad de alojamiento de SearchView:
@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu, menu); MenuItem search = menu.findItem(R.id.search); searchView = (SearchView) MenuItemCompat.getActionView(search); SearchManager searchManager = (SearchManager)getSystemService(Context.SEARCH_SERVICE); searchView.setSearchableInfo(searchManager .getSearchableInfo(getComponentName())); return true; }
Y aquí está searchable.xml en res / xml:
<?xml version="1.0" encoding="utf-8"?> <searchable xmlns:android="http://schemas.android.com/apk/res/android" android:hint="@string/search_hint" android:label="@string/search_title" > </searchable>
Por último, aquí está el archivo menu.xml en res / menu:
<item android:id="@+id/search" android:icon="@drawable/ic_search_white_18dp" android:title="@string/search_title" myappname:actionViewClass="android.support.v7.widget.SearchView" myappname:showAsAction="ifRoom|collapseActionView"/>
(Obviamente myappname reemplaza mi nombre de aplicación real aquí).
Extrañamente, la búsqueda de voz funciona perfectamente normal después de agregar
android:voiceSearchMode="showVoiceSearchButton|launchRecognizer"
En searchable.xml. Incluso envía la frase reconocida en la intención de la actividad de resultados de búsqueda. El único problema es que simplemente no puedo ingresar texto en el campo de texto – ni siquiera hay un cursor parpadeando allí. Los intentos de hacer algo como searchView.requestFocus () no tienen ningún resultado.
- Android - NullPointerException en SearchView en la barra de acciones
- Quitar icono de la vista de búsqueda del texto de la pista
- SearchView como la aplicación Google Play Video
- Android Support Library ActionBar no funciona en el dispositivo 2.3
- Cómo eliminar subrayado blanco en un widget de SearchView en la barra de herramientas Android
- Mostrar icono de micrófono en SearchView siempre
- ¿Cómo personalizar el botón "arriba" cuando se está expandiendo el searchView?
- Cómo colapsar completamente un SearchView después de un elemento seleccionado?
Después de perder 8 horas en esto, me propuse una solución. No estoy seguro de cuánto de un hack es, pero funciona.
Me di cuenta de que el EditText en el SearchView se comportaba erráticamente en lo que respecta a la concentración se refiere: no tenía ningún cursor y, curiosamente, cuando tire el cajón de notificación hacia abajo, parecía cambiar el enfoque. Decidí ir con la teoría que el problema era el foco del EditText dentro del SearchView, así que fui buscando el android.R.id del EditText.
Después de buscar, encontré esta respuesta . Así que tengo una referencia a la EditText dentro de la SearchView así:
EditText searchField = (EditText) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
Entonces pedí el foco para el EditText:
searchField.requestFocus();
… y de repente el SearchView podría aceptar texto, con todas las devoluciones de llamada relevantes trabajando!
Sólo tenía un problema a la izquierda: cuando onPause () fue llamado, mi solución dejó de funcionar desde el EditText perdido foco. Así que acabo de añadir:
invalidateOptionsMenu();
… en onResume () y ahora funciona perfectamente.
Debo decir, sin embargo: fue una experiencia realmente extraña desde que seguí los pasos religiosamente (no en la guía oficial de desarrolladores de Android, que tiene una serie de errores) y todavía no podía obtener el SearchView EditText para enfocar. Tengo una sospecha de que el cajón de nav se centra en la creación de actividades y tal vez esa fue la fuente del problema, pero no estoy seguro todavía.
- Com.google.aaaal 400 Bad Request {"error": "invalid_grant"} al insertar una fila en bigquery
- ¿Por qué necesitamos almacenar datos Goefence en la aplicación android?