Hola estoy intentando utilizar el FireBaseRecyclerAdapter pero el populateViewHolder solo se me ejecuta 1 vez, y en la base de datos de FireBase tengo mas de un elemento. Le he añadido al FireBaseRecyclerAdapter un AdapterDataObserver y en el método onItemRangeChanged si que se ejecuta tantas veces como items tengo en la base de datos pero en el populateView sigue ejecutándose una sola vez.
Os pongo mi código:
Base de datos FireBase:
public class MyFireBaseAdapterRecycleView extends FirebaseRecyclerAdapter<ModeloDatos,MyFireBaseAdapterRecycleView.MyFireViewHolder> {
public MyFireBaseAdapterRecycleView(Class<ModeloDatos> modelClass, int modelLayout, Class<MyFireViewHolder> viewHolderClass, DatabaseReference ref) {
super(modelClass, modelLayout, viewHolderClass, ref);
}
@Override
protected void populateViewHolder(MyFireViewHolder viewHolder, ModeloDatos modelo, int position) {
viewHolder.bindDatos(modelo);
}
/** Clase ViewHolder interna */
public static class MyFireViewHolder extends RecyclerView.ViewHolder {
private TextView uidUsuario;
private TextView uidImagen;
public MyFireViewHolder(View itemView) {
super(itemView);
uidUsuario = (TextView)itemView.findViewById(R.id.tvIdUsuario);
uidImagen = (TextView)itemView.findViewById(R.id.tvIdImagen);
}
public void bindDatos(ModeloDatos datos){
uidUsuario.setText(datos.getUidUser());
uidImagen.setText(datos.getUidImagen());
}
Código del AdapterDataObserver:
public class AdapterFireDataObserver extends RecyclerView.AdapterDataObserver {
@Override
public void onItemRangeChanged(int positionStart, int itemCount) {
super.onItemRangeChanged(positionStart, itemCount);
}
Código del Modelo de datos:
public class ModeloDatos {
private String uidUser;
private String uidImagen;
public ModeloDatos() {
}
public String getUidUser() {
return uidUser;
}
public void setUidUser(String uidUser) {
this.uidUser = uidUser;
}
public String getUidImagen() {
return uidImagen;
}
public void setUidImagen(String uidImagen) {
this.uidImagen= uidImagen;
}
y código de la actividad:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_recycle);
adaptador = new MyFireBaseAdapterRecycleView(ModeloDatos.class, R.layout.fila_fire_recycle,
MyFireBaseAdapterRecycleView.MyFireViewHolder.class, FirebaseDatabase.getInstance().getReference().child("Imagenes"));
recyclerView = (RecyclerView)findViewById(R.id.rvSGOliver);
recyclerView.setHasFixedSize(true);
observer = new AdapterFireDataObserver();
adaptador.registerAdapterDataObserver(observer);
recyclerView.setAdapter(adaptador);
recyclerView.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false));
}
Muchas Gracias!