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:
- Cómo reemplazar un fragmento con otro fragmento utilizando el oyente en el primer fragmento
- Pasar los datos a otro fragmento de vista de desplazamiento con la pestaña de estudio de Android, no botón
- ¿Por qué el teclado virtual de Android no responde a EditText?
- No se puede usar barra de acción y Fragmento en Android 2.3
- Debería tener referencias a fragmentos dentro de mi actividad
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); }
- Fragmentos: Eliminar todos los fragmentos en una vista
- Receptor de radiodifusión dinámica en fragmento
- excepción java.lang.NoClassDefFoundError en algunos dispositivos
- Cómo reemplazar View Pager ver completamente con un nuevo Fragmento en Android
- Diferencia entre android.app.Fragment y android.support.v4.app.Fragment
- ViewPager con Fragmentos dentro de PopupWindow (o DialogFragment) - Error no se encontró ninguna vista para id para el fragmento
- Fragmento getArguments () devuelve null
- En una actividad tabulada con ViewPager, el ListView aparece cortado desde la parte inferior
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.
- ¿Cómo almacenar en caché android.graphics.path o Bitmap cuando se usan Overlays?
- WinDeath en notifyDataSetChanged ()