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.

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.

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.

  • Adición de SearchView en el fragmento
  • ¿Cómo manejar el evento de clic de sugerencia con SearchView en ActionBar, ContentProvider llamando a webService, devolviendo el cursor?
  • Cambiar TextColor en SearchView mediante la barra de herramientas de Android
  • Android ActionBar: plegable SearchView con botón de acción
  • ¿Cómo detectar si SearchView se expande?
  • Android: Añadir un botón personalizado a SearchView Widget en Actionbar
  • Android: evita el truncamiento de texto en las sugerencias de SearchView?
  • SearchView en OptionsMenu no es el ancho completo
  • Android ActionBar Personalizar Buscar Ver
  • Cambiar el texto de SearchView y el color de la sugerencia de appcompat
  • Android: getSearchableInfo (getComponentName ()) devolviendo null?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.