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?

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?

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.

  • Android: Suscribirse al tema de mensajería en la nube de Firebase (FCM)
  • ¿Puede la aplicación android múltiple acceder a la misma base de datos de firebase?
  • AbstractMethodError con la mensajería de Cloud Firebase
  • Quitar el token FCM del grupo de dispositivos Firebase
  • Informe de fallo de Firebase contiene seguimiento de pila con <OR>
  • Android Firebase - no puede obtener userid usando getUid () - Error: en la referencia de objeto nulo
  • Cómo manejar la caducidad de token firebase personalizada en Firebase 3.xx
  • Cómo obtener la cadena de base de datos firebase en tiempo real que contienen en clave única
  • Firebase Crash Reporting error: la aplicación cliente com.xxxx está bloqueada
  • Cómo obtener la clave obj de FirebaseListAdapter en el elemento Haga clic en. FirebaseUI
  • Firebase assistant no se muestra en Studio 2.2.3
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.