Pasar datos de búsqueda a la actividad de búsqueda

Tengo una actividad principal que tiene 2 fragmentos. La actividad principal tiene un SearchView en la barra de acción. Ambos fragmentos tienen una lista de gran número de cadenas, List<String> .

El flujo es:

El usuario entra en el Fragmento I -> Selecciona una cadena (digamos Selection1 ) -> Basado en Selection1 una lista de cadenas se rellena en el segundo fragmento -> Aquí el usuario selecciona una segunda String —> Procesamiento basado en estos dos instrumentos de cuerda.

Ahora, ya que ambos fragmentos contienen un gran número de cadenas, el usuario introduce una consulta en el SearchView , que filtra la lista y la reduce a una lista más pequeña que se muestra en SearchableActivity .

Ahora el problema es cómo la SearchableActivity obtiene acceso a estos dos List<String> para filtrarlos basados ​​en la consulta y mostrar una lista reducida al usuario.

Actualmente lo que he hecho se sobreescribe onSearchRequested y pasar los datos como

  @Override public boolean onSearchRequested() { Bundle appData = new Bundle(); appData.putString(FRAGMENT_ID, "Fragment_A"); appData.putStringArrayList(SEARCH_LIST, searchList); startSearch(null, false, appData, false); return true; } 

¿Existe una mejor manera o forma estándar por la que este problema se puede manejar, es decir, una aplicación que permite que los datos se basan desde mi MainActivity a SearchableActivity ?

Editar: Añadir código. Mostrar cómo se configuran los datos en el Fragment . onDataReceived se llama desde el HttpManager que recibe los datos.

 @Override public void onDataReceived(String type,final Object object) { switch(type) { case PopItConstants.UPDATE_LIST: getActivity().runOnUiThread(new Runnable() { @Override public void run() { updateCinemaList((List<String>) object); } }); break; } } public void updateDataList(List<String> data) { this.dataList = data; spinner.setVisibility(View.GONE); mAdapter.updateList(dataList); } 

Acabo de responder a una pregunta similar hace unos minutos, en cómo puedo enviar una lista a otra actividad en Android Studio

Le animo a que reconsidere su modelo de simplemente pasar datos alrededor entre Actividades y Fragmentos. Considere la posibilidad de crear uno o más modelos de datos (clases que no son de Android) para su aplicación y poner estos modelos a disposición de las clases de Android (Actividades, Fragmentos, etc.) que los necesiten.

Elimine todo el código de almacenamiento y manipulación de datos de sus Actividades y Fragmentos y póngalo en el (los) modelo (s).

Bueno … Así es como lo hice.

Básicamente, los datos recibidos en los dos fragmentos no eran simplemente List<String> sino que eran modelos viz. Cine y Región que contenía detalles distintos de los nombres, incluyendo ubicación, clasificación, etc.

Así que, en primer lugar, hice una interfaz ISearchable

 public Interface ISearchable { // This contains the Search Text. An ISearchable item is included // in search results if query is contained in the String returned by this method public String getSearchText(); //This is meant to return the String that must be displayed if this item is in search results public String getDisplayText(); //This is meant to handle onClick of this searchableItem public void handleOnClick(); } 

Tanto el cine y los modelos de la Región implementado ISearchable .

Después de esto, utilicé una clase singleton DataManager en la que mantenía una List<ISearchable> currentSearchList .

 public class DataManager { .....<singleton implementation>.... List<ISearchable> currentSearchList; public void setSearchList(List<ISearchable> searchList) { this.currentSearchList = searchList; } public List<ISearchable> getSearchList() { return this.currentSearchList; } } 

Por lo tanto, siempre que se carga un fragmento (Fragment_A o Fragment_B), se actualiza esta currentSearchList , de modo que cuando SearchableActivity realiza la búsqueda todo lo que tiene que hacer es DataManager.getInstance().getSearchList() y luego usar esta lista para filtrar una lista De artículos a juego.

Así es como manejé el problema de tener listas en la actividad que no sea la SearchableActivity que necesita realizar la búsqueda.

Entiendo que esto podría no ser la mejor solución, así que espero sugerencias y críticas, y usando eso para llegar a una solución mejor.

  • Fragmento de Android Studio - método onButtonPressed
  • Añadir fragmento en un fragmento (fragmento anidado)
  • Android Material Design cajón de navegación setClickListener
  • Después de la rotación, la transacción de fragmentos da IllegalStateException
  • Fragmento en ViewPager utilizando FragmentPagerAdapter está en blanco la segunda vez que se ve
  • Entrada recursiva para ejecutarPendingTransactions
  • Actividad y Fragmento Ciclos de Vida y Cambios de Orientación
  • Excepción NullPointer en android.support.v4.app.FragmentManagerImpl.makeInactive
  • Mostrar diálogo de progreso dentro de DialogFragment
  • Android Fragment, volver sin recargar / recargar Fragmento
  • Tab + ViewPager no se actualiza en su lugar muestra advertencia extraña estado esperado 3 encontrado 2
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.