Problema con FirebaseUI (Populate ViewHolder) no llena RecyclerView
¡Hola comunidad 😃! Los saludo, pero antes quiero felicitar al equipo de EDteam por sus cursos de calidad, han hecho muy buen trabajo durante todos estos años, espero que sigan creciendo y llevando conocimiento a toda Latinoamérica (y más allá). Sin más, describo a continuación mi problema.
Contexto
He estado siguiendo el curso de Android Avanzado con Firebase con el profesor José Dimas Luján y me ha ido muy bien, hasta que llegué a la parte de poblar (llenar) un RecyclerView utilizando FirebaseUI.
Estoy utilizando las librerías más recientes de Firebase, por lo que entiendo (gracias a una búsqueda en internet) que el método populateViewHolder ya no se utiliza. En su lugar, se realiza una consulta (query) primero, referenciando al nodo JSON de la base de datos y se "construye" un objeto que pasaremos como parámetro al adaptador de Firebase. Este adaptador, tiene dos métodos (creo que les serán familiares a algunos) llamados onCreateViewHolder() y onBindViewHolder() que es donde inflamos el layout y lo llenamos. La documentación oficial la consulté desde este enlace: Using FirebaseUI to populate a RecyclerView.
Mi problema está en que no me muestra la lista de elementos, es decir, se queda en blanco el RecyclerView. No tengo errores en el log o similares y creo estar haciendo todo bien hasta este punto, he buscado en internet y otros proyectos muestran una estructura similar. Adjunto parte del código del proyecto:
Dependencias
dependencies {
...
implementation 'com.android.support:recyclerview-v7:28.0.0'
implementation 'com.android.support:cardview-v7:28.0.0'
implementation 'com.google.firebase:firebase-core:16.0.9'
implementation 'com.google.firebase:firebase-database:17.0.0'
implementation 'com.google.firebase:firebase-auth:17.0.0'
implementation 'com.firebaseui:firebase-ui-auth:4.1.0' //Agregar esta linea tambien...
implementation 'com.firebaseui:firebase-ui:4.1.0' // Para trabajar con FirebaseUI
implementation 'com.firebaseui:firebase-ui-database:4.1.0'
}
POJO (Clase Notas.java)
package com.rolandoselvera.cursoedteamapp;
public class Notas {
public String id;
public String nombre;
public int conteo;
// Constructor:
public Notas(){
super();
}
public Notas(String id, String nombre, int conteo){
this.id = id;
this.nombre = nombre;
this.conteo = conteo;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public int getConteo() {
return conteo;
}
public void setConteo(int conteo) {
this.conteo = conteo;
}
}
Clase anidada en NotasAdapter.java (ViewHolder)
...
public static class ViewHolder extends RecyclerView.ViewHolder{
CardView cardView;
TextView conteo, nombre;
ImageView trash;
public ViewHolder(View view){
super(view);
cardView = view.findViewById(R.id.cardView);
conteo = view.findViewById(R.id.txtConteo);
nombre = view.findViewById(R.id.txtNombre);
trash = view.findViewById(R.id.trash);
}
}
Clase principal donde se muestra la vista (NotasActivity.java)
// Consulta:
Query consulta = FirebaseDatabase.getInstance().getReference().child("Item");
//Query consulta = databaseReference.child("Item"); // Cualquiera de los dos query, arroja la misma URL...
// Opciones:
FirebaseRecyclerOptions<Notas> opciones =
new FirebaseRecyclerOptions.Builder<Notas>()
.setQuery(consulta, Notas.class)
.build();
FirebaseRecyclerAdapter notasAdapter = new FirebaseRecyclerAdapter<Notas, NotasAdapter.ViewHolder>(
opciones) {
<a href="/u/NonNull" data-community-mention="USER" data-community-mention-slug="NonNull">@NonNull</a>
<a href="/u/Override" data-community-mention="USER" data-community-mention-slug="Override">@Override</a>
public NotasAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.notas, viewGroup, false);
return new NotasAdapter.ViewHolder(view);
}
<a href="/u/Override" data-community-mention="USER" data-community-mention-slug="Override">@Override</a>
public void onBindViewHolder(@NonNull NotasAdapter.ViewHolder viewHolder, int position, <a href="/u/NonNullNotasmodel" data-community-mention="USER" data-community-mention-slug="NonNullNotasmodel">@NonNullNotasmodel</a>) {
viewHolder.conteo.setText(String.valueOf(model.getConteo()));
viewHolder.nombre.setText(model.getNombre());
}
};
recyclerView.setLayoutManager(linearLayoutManager);
recyclerView.setAdapter(notasAdapter);
Agradezo su apoyo de antemano, que ya llevo varios días quebrandome la cabeza 😖✌ .
