Filtrar una vista de reciclaje con un regulador de ciclos de fuego
Tengo un RecyclerView con un FirebaseRecyclerAdapter. Quiero rellenar el RecyclerView con una lista de nombres cuando el usuario comienza a escribir en el SearchView.
public class SchoolsAdapter extends FirebaseRecyclerAdapter<School, SchoolsAdapter.SchoolViewHolder> { public SchoolsAdapter(Query ref) { super(School.class, R.layout.item_school, SchoolViewHolder.class, ref); } @Override public void populateViewHolder(SchoolViewHolder schoolViewHolder, School school, int position) { schoolViewHolder.name.setText(school.getName()); schoolViewHolder.address.setText(school.getAddress()); } static class SchoolViewHolder extends RecyclerView.ViewHolder { public TextView name; public TextView address; public SchoolViewHolder(View itemView) { super(itemView); name = (TextView) itemView.findViewById(R.id.school_item_tview_name); address = (TextView) itemView.findViewById(R.id.school_item_tview_address); } } }
Supongo que necesito agregar un QueryTextListener a la búsqueda que actualizaría la consulta en el adaptador. ¿Rompería esto el FirebaseRecyclerAdapter?
- ¿Cómo recuperar datos de la base de datos de firebase que está teniendo matriz anidada y estructura de objetos?
- ¿Cómo reanudar una descarga de archivos en Firebase Storage?
- Java.util.zip.ZipException: entrada duplicada con firebase
- Añadir acción a la notificación Firebase
- Firebase se bloquea en Android durante el inicio de sesión anónimo
O debo
@Override public boolean onQueryTextChange(String newText) { mRecyclerView.setAdapter(new SchoolAdapter(ref.orderByChild("name").startAt(userQuery).endAt(userQuery+"~")) return false; }
Cuando el usuario escribe algo?
También los docs hablan de ordenar y ordenar consultas de firebase pero no dicen explícitamente la mejor manera de hacer concordancia de patrones de cadenas. ¿Cuál es la mejor manera de hacer concordancia de cadenas para que la vista de reciclador muestre todos los resultados que tienen la consulta de búsqueda como una subcadena del registro de base de datos y posiblemente aquellos que están a 1 distancia de edición también.
También una manera de ignorecase en las consultas?
- Android: la aplicación de indexación de aplicaciones de Firebase no se muestra en las sugerencias de autocompletar de google
- Cómo agregar texto personalizado en lugar de URL en mensaje Deeplink
- Cómo recuperar campos adicionales de Firebase Token personalizado en "UserInfo"
- Firebase Cloud Messaging colapse_key no se ha recibido (tasa limitada?)
- Firebase Cloud Messaging: mejores prácticas
- Rare NullPointerException en GoogleApiClient usando Firebase
- Filtra los datos en firebase con SearchView
- ¿Cómo puedo usar una consulta Firebase para devolver un booleano?
Acabo de terminar de hacer algo cerca de lo que estás buscando, no estoy seguro de que es la solución más elegante, pero voy a tirar algunas ideas y si crees que mi idea me ayudará definitivamente puedo proporcionar algunos ejemplos.
En primer lugar, cuando extendí la base FirebaseAdapter agregué un nuevo filtro llamado mFullList, ya que los mItems de FirebaseAdapter se utilizarán para la lista de visualización, no quiero volver a la red cuando no tenía que hacerlo. A continuación, anula todos los métodos en mi clase hijo para actualizar mFullList con los valores de las devoluciones de llamada de Firebase, ordenarlos, filtrarlos y llamar a super.X () con la nueva lista.
Con rapidez:
public reset(List) mFullList = List Collections.sort(mFullList, Comparator) getFilter().filter(filterString)
FilterString es un campo dentro del adaptador y se actualiza durante la llamada a getFilter (). Filter (). Durante el filtro de ejecución, entonces hago un bucle a través del mFullList y hago una comparación de:
mFullList.get(pos).getName().toLowerCase().contains(filterString.toLowerCase);
Una vez completado el ajuste, tiene una nueva lista que se pasa a Filter.publishResults en el objeto FilterResults. PublishResults llama a un método de la clase que realiza la actualización y notifica.
filterCompleted(List) getItems().clear getItems().addAll notify
Esencialmente, no quería que el FirebaseAdapater deje de obtener la lista completa de elementos, sólo quería que la solicitud de los usuarios para filtrar esa lista completa y manejar su solicitud de manera adecuada. Además, no vi un punto a las solicitudes de red añadido basado en el usuario escribiendo un carácter extra.
Utilizando este método sólo puede utilizar:
adapter.getFilter().filter("something")
Para filtrar la lista en función de su campo actualizado y
adapter.getFilter().filter("")
Para restablecer la lista completa (siempre y cuando su performFilter () lo maneje correctamente) De esta manera las nuevas actualizaciones de FireBase se filtrarán basándose en la selección de los usuarios, así como cuando un usuario escriba nuevos valores, no requerirá hacer nuevos Firebase Solicitudes de red.
- ¿Las notificaciones no siempre se reciben por teléfono?
- Manera correcta de abstraer el reino en las aplicaciones de Android