¿Cómo puedo pasar variables extra durante una búsqueda invocada por un SearchView / Widget?

Estoy utilizando correctamente un widget de búsqueda en mi barra de acción para realizar una búsqueda siguiendo esta guía . La búsqueda está bien, pero me pregunto cómo pasar variables adicionales en una búsqueda. La misma guía indica que puedo reemplazar onSearchRequested() , pero esto no parece funcionar con un widget de búsqueda.

Mi aplicación se bloquea al crear la clase de búsqueda porque appData siempre es null .

Nota

onSearchRequested() se llama, pero el paquete no lo hace a mi método onCreate() .

Todos los extras de la intención pasada son {user_query=my-query, query=my-query} .

Parece que la única manera de hacerlo es interceptar nuevas actividades creadas en su actividad que estén habilitadas para la búsqueda. Para ello startActivity() método startActivity() . A continuación, puede comprobar para asegurarse de que la actividad es de hecho la actividad de búsqueda, a continuación, añadir un extra a la intención. El código de trabajo está abajo.

 @Override public void startActivity(Intent intent) { // check if search intent if (Intent.ACTION_SEARCH.equals(intent.getAction())) { intent.putExtra("KEY", "VALUE"); } super.startActivity(intent); } 

A continuación, puede tomar su extra como lo haría cualquier otro extra en su actividad de búsqueda utilizando:

 mValue = intent.getStringExtra("KEY"); 

Creo que solo quieres usar

String value = intent.getStringExtra(SearchManager.APP_DATA);

Porque la intención contiene el paquete que pasó para iniciar la búsqueda.

Puede anular el método onSearchRequested dentro de la Activity que está invocando la búsqueda.

 @Override public boolean onSearchRequested() { Bundle appData = new Bundle(); appData.putBoolean(SearchableActivity.JARGON, true); startSearch(null, false, appData, false); return true; } 

Entonces usted puede extraer estos datos dentro de la SearchableActivity

 Bundle appData = getIntent().getBundleExtra(SearchManager.APP_DATA); if (appData != null) { boolean jargon = appData.getBoolean(SearchableActivity.JARGON); } 
  • SearchView es nulo Android
  • Clone textview para anexarlo a un ViewGroup
  • Android - Cómo saber si una vista superpone otra vista en RelativeLayout
  • Problema: el niño especificado ya tiene un padre. Debe llamar a removeView () en el padre del niño primero
  • Android: establece las pestañas predeterminadas pero sin ningún contenido
  • Opuesto de setContentView
  • el enlace de datos; la etiqueta de la vista no es correcta, Android
  • View.onMeasure () no se llama
  • ¿Por qué se crea un FrameLayout extra para fragmentos?
  • Cómo hacer que SearchView pierda el foco y se contraiga al hacer clic en otra parte de la actividad
  • Vista personalizada con diseño XML en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.