¿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.
-
Anulación en cuestión:
- ¿Cómo utilizar mi SurfaceView con main.xml en Android?
- GetDrawingCache devuelve siempre el mismo Bitmap
- El onQueryTextSubmit en SearchView se procesa dos veces en Android Java
- Iniciar nueva actividad desde SearchView
- Método recomendado para presentar texto con formato en Android?
@Override public boolean onSearchRequested() { Bundle appData = new Bundle(); appData.putString("KEY", "VALUE"); startSearch(null, false, appData, false); return true; }
-
Obtener el paquete en mi clase de actividad:
protected void onCreate(Bundle savedInstanceState) { // ... Intent intent = getIntent(); Bundle appData = intent.getBundleExtra(SearchManager.APP_DATA); String value = appData.getString("KEY"); Log.d("VALUE", value); // ... }
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}
.
- Android SearchView con otros elementos de ActionBar
- ¿Cómo usar la vista propia en el diseño?
- Eliminar un OnClickListener en una vista quitar todos los eventos de toque en las vistas detrás
- TextView dentro de ViewPager intercepta eventos de toque
- Android padding problema
- ¿Cómo podemos agregar maxlength en SearchView?
- ¿Es posible usar inflador de vista para inflar artículos individuales?
- Vista transparente sobre ImageView
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); }
- ¿Puedo obligar al botón de retroceso de Android a retroceder dos pasos en la pila de actividad?
- Android EditText ("Textbox"): Auto capitalización de la primera letra de cada palabra mientras el usuario escribe