es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

FirebaseRecyclerView – hacer que el método onBindViewHolder cree varios elementos.

Estoy creando un FirebaseRecyclerView.

Le doy a mi FirebaseRecyclerView una consulta que se refiere a objetos de mi FirestoreDatabase.

Pero en lugar de tener 1 elemento por cada objeto, quiero crear varios elementos.

Ejemplo de la estructura de un objeto:

Firestore-root
|
— colección (colección)
|
— documento1 (documento)
| |
| — documentField (Lista de objetos): “Data1”
| : “Data2”
| : “Data3”

Lo que puedo hacer:

Ver[I]Can_Do

Lo que quiero hacer:

Ver[I]Want[To]Have

NB: El número de ‘Data’ está cambiando, por lo que no puedo diseñar un itemView que coincida con una cantidad indefinida de variables.

Supongo que la solución está en el método onBindViewHolder, pero no sé cómo hacer que funcione.

No dudes en pedir más detalles si es necesario. Cualquier ayuda o sugerencia sería apreciada, ¡gracias de antemano!

Edit 01/21/2022:

Sigo atascado en esto…
Intenté dar más detalles en esta pregunta: https://stackoverflow.com/questions/70559215/display-one-item-for-each-object-in-a-single-firebase-document-field-firebaser
Tal vez esto sea más explícito.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Como experto en IT especializado en java, android, Firebase, android-recyclerview y FirebaseUI, aquí está mi sugerencia para crear un FirebaseRecyclerView con múltiples elementos por objeto:

    1. Modifica tu consulta para recuperar el documento de Firestore con el campo deseado (en este caso, “campoDocumento”).
    2. En el método onBindViewHolder, recupera la lista de objetos del campo documentField.
    3. Itera a través de la lista y crea un nuevo elemento para cada objeto.
    4. Configura los datos del nuevo elemento utilizando el objeto recuperado.
    5. Vincula el nuevo elemento al viewHolder y muéstralo.

    Aquí tienes un código de muestra para que te hagas una idea de cómo podría verse:

    public class MyAdapter extends FirebaseRecyclerAdapter<documentsnapshot, myviewholder=""> {
    
        public MyAdapter(Query query) {
            super(new FirebaseRecyclerOptions.Builder<documentsnapshot>()
                    .setQuery(query, DocumentSnapshot.class)
                    .build());
        }
    
        @Override
        protected void onBindViewHolder(@NonNull MyViewHolder holder, int position, @NonNull DocumentSnapshot snapshot) {
            List<object> dataList = snapshot.get("documentField");
    
            for (Object obj : dataList) {
                MyItem item = new MyItem(); // crea un nuevo elemento para cada objeto
                item.setData(obj); // establece los datos del elemento utilizando el objeto recuperado
                holder.bind(item); // vincula el elemento al viewHolder y muéstralo
            }
        }
    
        // ... otros métodos del adaptador
    }
    

    Ten en cuenta que esto es solo una guía general y es posible que necesites modificarlo para adaptarlo a tu caso de uso específico. ¡Buena suerte!</documentsnapshot,>

Comments are closed.