android-developers
[Arriba] [Todas las Listas]

[android-developers] Por qué es sólo el último elemento en un ArrayLi

To: Android Developers <android-developers@xxxxxxxxxxxxxxxx>
Subject: [android-developers] Por qué es sólo el último elemento en un ArrayList mostrado en RecyclerView?
From: Jeff Biss <jeff@xxxxxxxxxxxxx>
Date: Thu, 3 Aug 2017 10:51:23 -0700 (PDT)
Delivery-date: Thu, 03 Aug 2017 13:52:44 -0400
Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20161025; h=sender:date:from:to:message-id:subject:mime-version :x-original-sender:reply-to:precedence:mailing-list:list-id :list-post:list-help:list-archive:list-subscribe:list-unsubscribe; bh=Eu1IJsUrNfXAsDwa7O/LerfnAta5Fh/jlMSdc8vcRrE=; b=AAQLCFVCfk2d+JSA4i8DNSb2Chy8Y7UupxUPETHCgrPoZ/YrhPnqqtdL2EMjZHdGz/ 8kxW89hKp+QJHLthQkkaPBWNb0Rx8ddRiQst4+rEave4b14cWXFfWzISgqchR/OA/AyM FcjlnDBa+E5p81HqwGkcfITzSLk9ZC9zApvFad1bFOh3KDeqrL6m5aeRuybK34UtOkeY 7DWADA/cK4/jdPAZADYkO0N3A2+SsSwP1BeGkKCMtEvL+w3dSbiM0JKhgCQl4wxdYTpr SE5S3lhCEkQ00DGgsWDT+vMq5aupEjByv7p4O5jj0eqMnFrgNepmIn8nJrGy0v+6owwA 5jFw==
Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marco-inc-com.20150623.gappssmtp.com; s=20150623; h=date:from:to:message-id:subject:mime-version:x-original-sender :reply-to:precedence:mailing-list:list-id:list-post:list-help :list-archive:list-subscribe:list-unsubscribe; bh=Eu1IJsUrNfXAsDwa7O/LerfnAta5Fh/jlMSdc8vcRrE=; b=mOEtA3C3U7Ysw6bTuU7on9Ox5ZlQKngyI2Vu96NHO+CSa9KTlfzcaS/XTMAip/tdwL Z0WUBu5yp3lGN4FrFwzxvm4K/QJTUI5J8Q82wZTR54gScA3Pa6TuHd+EKaIxnChGAHDm SY7zXRRaLFk6q3A2HWVEQ4hI9riaSy9N5+usGTupzEXilhvG/jIt0nnMnCePFK1996ls hkEslIjHuUkvVTv2bZfiLHdSZ6QpQ7G6yeOQy2R2quo+F2n+BTUR4AA+wf8GusMWwoS1 b+sSq3AMkyRUosEItFNNQ3VKMZTeUi4TK4uxC2xdCCPxL3usrYpt02pXF1rNWCoi64UH THSw==
Envelope-to: traductor@xxxxxxxxxxx
List-archive: <https://groups.google.com/group/android-developer>
List-help: <https://groups.google.com/support/>, <mailto:android-developers+help@googlegroups.com>
List-id: <android-developers.googlegroups.com>
List-post: <https://groups.google.com/group/android-developers/post>, <mailto:android-developers@googlegroups.com>
List-subscribe: <https://groups.google.com/group/android-developers/subscribe>, <mailto:android-developers+subscribe@googlegroups.com>
List-unsubscribe: <mailto:googlegroups-manage+364598216046+unsubscribe@googlegroups.com>, <https://groups.google.com/group/android-developers/subscribe>
Mailing-list: list android-developers@xxxxxxxxxxxxxxxx; contact android-developers+owners@xxxxxxxxxxxxxxxx
Reply-to: android-developers@xxxxxxxxxxxxxxxx
Sender: android-developers@xxxxxxxxxxxxxxxx
Estoy intentando aprender cómo para utilizar el *RecyclerView y ha encontrado que sólo 
el último elemento en un *ArrayList es mostrado en ambas posiciones (hay 
sólo dos) y no puede imaginar fuera de por qué. He utilizado *LogCat para mostrar lo que está 
yendo en tan mirada al *LogCat producción abajo.

- Líneas 2 y 3 espectáculo que el *cursor ha accedido el DB.

- Líneas 4 *thru 7 espectáculo que los nombres son recuperados del DB y pasado 
a *ArrayLists.

- Líneas 8 y 10 espectáculo que el *ArrayList *petNameList es *succefully pasado 
al adaptador (como elementos).

- Línea 17 espectáculos qué posición en el *ArrayList está siendo señalado a -

Línea 18 espectáculos lo que es #almacenar en *ArrayList[0] y línea 19 espectáculos lo que es 
ahora en "elemento". (Supongo que lo que es #mostrar es un *pointer).

- Línea 20 estados que los valores en líneas 18 y 19 tendría que ser el mismo nombre 
y ellos son.

- Línea 21 espectáculos lo que *onBindViewHolder ha pasado al *ViewHolder y NO es el primer nombre almacenado en el DB o en
  el *ArrayList. Tendría que ser "*fert" (ve línea 5).

- Línea 26 espectáculos lo que es #almacenar en *ArrayList[1] y línea 27 espectáculos lo que es 
ahora en "elemento". (Supongo que lo que es #mostrar es un *pointer).

- Línea 28 estados que los valores en líneas 26 y 27 tendría que ser el mismo nombre 
y ellos son.

- Línea 29 espectáculos lo que *onBindViewHolder ha pasado al *ViewHolder y es el nombre almacenado en el DB y en
  el *ArrayList.

Tan, aparece que mi "*setText la declaración está pasando un *incorrect valor, 
"*qwerty", al *ViewHolder es mal y actualmente no sé por qué. Estoy 
investigando esto y  correo una respuesta si lo encuentro antes de que alguien *ansers 
esta cuestión.

Para claridad y espacial, copié sólo lo que pienso es el pertinente 
*MainActivity código abajo el *LogCat producción y el código de Adaptador abajo aquello. 
Cada cual muestra el *Log.*d() Declaraciones que tendrían que ayudar con correlación.

***LogCat:**

    1. !------*MainActivity: Inicios aquí-----!
    2. el DB tiene: 2 filas
    3. *cursor Tiene: 2 filas
    4. Nombre de *cursor es: *fert
    5. *pN *arraylist[0] es: *fert
    6. Nombre de *cursor es: *qwerty
    7. *pN *arraylist[1] es: *qwerty
    8. *petNameList Es: [com.example.jbiss.petminder.petname@fd82*c44, 
       com.example.jbiss.petminder.petname@d1*fc12*d]
    9. Hecho lo a: *SelectNameAdapter constructor
    10. Los Elementos es: [com.example.jbiss.petminder.petname@fd82*c44, 
        com.example.jbiss.petminder.petname@d1*fc12*d]
    11. *mAdapter Cuenta es: 2
    12. *pN *arraylist[0] es: *fert
    13. *pN *arraylist[1] es: *qwerty
    14. Hecho lo a: *onCreateViewHolder
    15. Hecho lo a: *ViewHolder
    16. Hecho lo a: *onBindViewHolder
    17. Posición en *ArrayList es: 0
    18. *mItems[0] es: com.example.jbiss.petminder.petname@fd82*c44
    19. El Elemento es: com.example.jbiss.petminder.petname@fd82*c44
    20. NOTA: el elemento tiene que igual *mItems[0]
    21. *onBindViewHolder Pasó: elemento.*getPetName() *qwerty A *ViewHolder
    22. Hecho lo a: *onCreateViewHolder
    23. Hecho lo a: *ViewHolder
    24. Hecho lo a: *onBindViewHolder
    25. Posición en *ArrayList es: 1
    26. *mItems[1] es: com.example.jbiss.petminder.petname@d1*fc12*d
    27. El Elemento es: com.example.jbiss.petminder.petname@d1*fc12*d
    28. NOTA: el elemento tiene que igual *mItems[1]
    29. *onBindViewHolder Pasó: elemento.*getPetName() *qwerty A *ViewHolder

**El código pertinente en *MainActivity:**

        *Log.*d("!------*MainActivity", "Empieza aquí-----!");

        //Poblar la lista con los nombres regresados del DB de nombre de la mascota
        mucho tiempo *numItems = *mDbHelper.*getPetCount();
        *Log.*d("el DB tiene", Cadena.*valueOf(*numItems) + " Filas");
        si (*numItems != 0)
            #unknown{^*cursor = *mDbHelper.*getPetNames();
            *numItems = *cursor.*getCount();
            *Log.*d("*cursor Tiene", Cadena.*valueOf(*numItems) + " Filas");
            *cursor.*moveToFirst();
            Puesto que (*int *i = 0; *i < *numItems; *i++)
                #unknown{^*PetName el nombre = nuevo *PetName(*cursor.*getString(NOMBRES_de MASCOTA));
                *Log.*d("Nombre de *cursor es", nombre.*getPetName());
                *petNameList.Añade(nombre);
                PN = *cursor.*getString(NOMBRES_de MASCOTA);
                *pN.Añade(PN);
                *Log.*d("*pN *arraylist" + "[" + *i + "] Es", 
Cadena.*valueOf(PN));
                *cursor.*moveToNext();
            }
        } Más
            //#unknown{^*otherwise, si #ninguno nombres de mascota existen *int él DB, hace las #ninguno mascotas 
el mensaje 
        encontrado visible
            *msgTv.*setText(*R.Cadena.Ninguna_mascota);
            *msgTv.*setVisibility(Vista.VISIBLE);
        }

        //el siguiendo producciones *URIs para los nombres que significan que el 
*arraylist
        //es un conjunto de *pointers al *PetName objetos?
        *Log.*d("*petNameList Es", Cadena.*valueOf(*petNameList));
        //*setup El adaptador y aplicarlo al *RecyclerView
        *mAdapter = nuevo *SelectNameAdapter(esto, *petNameList);
        *mRecyclerView.*setAdapter(*mAdapter);
        *Log.*d("*mAdapter Cuenta es", Cadena.*valueOf(*mAdapter.*getItemCount()));

        Puesto que(*int *i = 0; *i < *pN.Medida(); *i++)
            #unknown{^*Log.*d("*pN *arraylist" + "[" + *i + "] Es", 
Cadena.*valueOf(*pN.Consigue(*i)));
        }


**código de Adaptador:**

    clase pública *SelectNameAdapter extiende 
    *RecyclerView.Adaptador<*SelectNameAdapter.*ViewHolder

    #Adj *ArrayList<*PetName> *mItems;
    Contexto privado *mContext;

    público *SelectNameAdapter(contexto de Contexto, *ArrayList<*PetName> elementos)
        #unknown{^*Log.*d("Hecho lo a ," "*SelectNameAdapter constructor");
        //el siguiendo producciones *URIs para los nombres que significan que el 
*arraylist
        //es un conjunto de *pointers al *PetName objetos?
        *Log.*d("Los Elementos es", Cadena.*valueOf(Elementos));
        esto.*mContext = Contexto;
        esto.*mItems = Elementos;
    }

    @*Override
    público *SelectNameAdapter.*ViewHolder *onCreateViewHolder(*ViewGroup 
Padre, *int *i)
        #unknown{^*Log.*d("Hecho lo a ," "*onCreateViewHolder");
        *LayoutInflater *inflater = *LayoutInflater.De(*mContext);
        Vista *itemView = *inflater.*inflate(*R.*layout.Mascota_*info, padre, falso);
        *ViewHolder *viewHolder = nuevo *ViewHolder(*itemView);
        regreso *viewHolder;
    }

    @*Override
    público *void *onBindViewHolder(*SelectNameAdapter.*ViewHolder Titular, *int 
posición)
        #unknown{^*Log.*d("Hecho lo a ," "*onBindViewHolder");
        *Log.*d("Posición en *ArrayList es", Cadena.*valueOf(Posición));
        *PetName elemento = *mItems.Consigue(posición);
        *Log.*d("*mItems[" + Posición + "] es", 
Cadena.*valueOf(*mItems.Consigue(posición)));
        *Log.*d("El Elemento es", Cadena.*valueOf(Elemento));
        *Log.*d("NOTA", "el elemento tiene que igual *mItems[" + posición + "]");
        titular.*tvName.*setText(Elemento.*getPetName());
        *Log.*d("*onBindViewHolder Pasado ", "elemento.*getPetName() " + 
Elemento.*getPetName() + " A *ViewHolder");
    }

    @*Override
    público *int *getItemCount()
        #nom *mItems.Medida();
    }

    público *static clase *ViewHolder extiende *RecyclerView.*ViewHolder

        #Nom *TextView *tvName;
        público *ViewHolder(Vista *itemView)
            #unknown{^*super(*itemView);
            *Log.*d("Hecho lo a ," "*ViewHolder");
            *tvName = (*TextView) *itemView.*findViewById(*R.*id.*petname);
        }
    }
    }

-- 
Recibiste este mensaje porque eres *subscribed al *Google Grupos "*Android *Developers" grupo.
A *unsubscribe de este grupo y la parón que recibe *emails de él, enviar un *email a *android-*developers+unsubscribe@xxxxxxxxxxxxxxxx.
A correo a este grupo, envía *email a *android-developers@xxxxxxxxxxxxxxxx.
Visita este grupo en *https://grupos.*google.*com/Grupo/*android-*developers.
Para ver esta discusión en la visita de web *https://grupos.*google.*com/*d/*msgid/*android-*developers/722*c2364-7768-4*bb8-#uno511-3*fc585*e6*b75*f%40*googlegroups.*com.
Para más opciones, visita *https://grupos.*google.*com/*d/*optout.
I am trying to learn how to use the RecyclerView and have found that only 
the last item in an ArrayList are displayed in both positions (there are 
only two) and can't figure out why. I have used LogCat to show what is 
going on so look to the LogCat output below.

- Lines 2 and 3 show that the cursor has accessed the DB.

- Lines 4 thru 7 show that the names are retrieved from the DB and passed 
to ArrayLists.

- Lines 8 and 10 show that the ArrayList petNameList is succefully passed 
to the adapter (as items).

- Line 17 shows what position in the ArrayList is being pointed to

- Line 18 shows what is stored in ArrayList[0] and line 19 shows what is 
now in "item". (I assume that what is shown is a pointer).

- Line 20 states that the values in lines 18 and 19 should be the same name 
and they are.

- Line 21 shows what onBindViewHolder has passed to the ViewHolder and it 
is NOT the first name stored in the DB or in the
  ArrayList. It should be "fert" (see line 5).

- Line 26 shows what is stored in ArrayList[1] and line 27 shows what is 
now in "item". (I assume that what is shown is a pointer).

- Line 28 states that the values in lines 26 and 27 should be the same name 
and they are.

- Line 29 shows what onBindViewHolder has passed to the ViewHolder and it 
is the name stored in the DB and in the
  ArrayList.

So, it appears that my "setText statement is passing an incorrect value, 
"qwerty", to the ViewHolder is wrong and I currently do not know why. I am 
researching this and will post an answer if I find it before someone ansers 
this question.

For clarity and space, I copied only what I think is the relevant 
MainActivity code below the LogCat output and the Adapter code below that. 
Each shows the Log.d() statements that should help with correlation.

**LogCat:**

    1. !------MainActivity: Starts here-----!
    2. DB has: 2 rows
    3. cursor has: 2 rows
    4. name from cursor is: fert
    5. pN arraylist[0] is: fert
    6. name from cursor is: qwerty
    7. pN arraylist[1] is: qwerty
    8. petNameList is: [com.example.jbiss.petminder.PetName@fd82c44, 
       com.example.jbiss.petminder.PetName@d1fc12d]
    9. made it to: SelectNameAdapter constructor
    10. items is: [com.example.jbiss.petminder.PetName@fd82c44, 
        com.example.jbiss.petminder.PetName@d1fc12d]
    11. mAdapter count is: 2
    12. pN arraylist[0] is: fert
    13. pN arraylist[1] is: qwerty
    14. made it to: onCreateViewHolder
    15. made it to: ViewHolder
    16. made it to: onBindViewHolder
    17. position in ArrayList is: 0
    18. mItems[0] is: com.example.jbiss.petminder.PetName@fd82c44
    19. item is: com.example.jbiss.petminder.PetName@fd82c44
    20. NOTE: item should equal mItems[0]
    21. onBindViewHolder passed: item.getPetName() qwerty to ViewHolder
    22. made it to: onCreateViewHolder
    23. made it to: ViewHolder
    24. made it to: onBindViewHolder
    25. position in ArrayList is: 1
    26. mItems[1] is: com.example.jbiss.petminder.PetName@d1fc12d
    27. item is: com.example.jbiss.petminder.PetName@d1fc12d
    28. NOTE: item should equal mItems[1]
    29. onBindViewHolder passed: item.getPetName() qwerty to ViewHolder

**The relevant code in MainActivity:**

        Log.d("!------MainActivity", "Starts here-----!");

        //populate the list with the names returned from the pet name DB
        long numItems = mDbHelper.getPetCount();
        Log.d("DB has", String.valueOf(numItems) + " rows");
        if (numItems != 0) {
            cursor = mDbHelper.getPetNames();
            numItems = cursor.getCount();
            Log.d("cursor has", String.valueOf(numItems) + " rows");
            cursor.moveToFirst();
            for (int i = 0; i < numItems; i++) {
                PetName name = new PetName(cursor.getString(PET_NAMES));
                Log.d("name from cursor is", name.getPetName());
                petNameList.add(name);
                PN = cursor.getString(PET_NAMES);
                pN.add(PN);
                Log.d("pN arraylist" + "[" + i + "] is", 
String.valueOf(PN));
                cursor.moveToNext();
            }
        } else{
            //otherwise, if no pet names exist int he DB, make the no pets 
found 
        message visible
            msgTv.setText(R.string.no_pets);
            msgTv.setVisibility(View.VISIBLE);
        }

        //the following outputs URIs for the names meaning that the 
arraylist
        //is a set of pointers to the PetName objects?
        Log.d("petNameList is", String.valueOf(petNameList));
        //setup the adapter and apply it to the RecyclerView
        mAdapter = new SelectNameAdapter(this, petNameList);
        mRecyclerView.setAdapter(mAdapter);
        Log.d("mAdapter count is", String.valueOf(mAdapter.getItemCount()));

        for(int i = 0; i < pN.size(); i++){
            Log.d("pN arraylist" + "[" + i + "] is", 
String.valueOf(pN.get(i)));
        }


**Adapter code:**

    public class SelectNameAdapter extends 
    RecyclerView.Adapter<SelectNameAdapter.ViewHolder> {

    private ArrayList<PetName> mItems;
    private Context mContext;

    public SelectNameAdapter(Context context, ArrayList<PetName> items) {
        Log.d("made it to", "SelectNameAdapter constructor");
        //the following outputs URIs for the names meaning that the 
arraylist
        //is a set of pointers to the PetName objects?
        Log.d("items is", String.valueOf(items));
        this.mContext = context;
        this.mItems = items;
    }

    @Override
    public SelectNameAdapter.ViewHolder onCreateViewHolder(ViewGroup 
parent, int i) {
        Log.d("made it to", "onCreateViewHolder");
        LayoutInflater inflater = LayoutInflater.from(mContext);
        View itemView = inflater.inflate(R.layout.pet_info, parent, false);
        ViewHolder viewHolder = new ViewHolder(itemView);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(SelectNameAdapter.ViewHolder holder, int 
position) {
        Log.d("made it to", "onBindViewHolder");
        Log.d("position in ArrayList is", String.valueOf(position));
        PetName item = mItems.get(position);
        Log.d("mItems[" + position + "] is", 
String.valueOf(mItems.get(position)));
        Log.d("item is", String.valueOf(item));
        Log.d("NOTE", "item should equal mItems[" + position + "]");
        holder.tvName.setText(item.getPetName());
        Log.d("onBindViewHolder passed ", "item.getPetName() " + 
item.getPetName() + " to ViewHolder");
    }

    @Override
    public int getItemCount() {
        return mItems.size();
    }

    public static class ViewHolder extends RecyclerView.ViewHolder {

        public TextView tvName;
        public ViewHolder(View itemView) {
            super(itemView);
            Log.d("made it to", "ViewHolder");
            tvName = (TextView) itemView.findViewById(R.id.petname);
        }
    }
    }

-- 
You received this message because you are subscribed to the Google Groups "Android Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email to android-developers+unsubscribe@xxxxxxxxxxxxxxxx.
To post to this group, send email to android-developers@xxxxxxxxxxxxxxxx.
Visit this group at https://groups.google.com/group/android-developers.
To view this discussion on the web visit https://groups.google.com/d/msgid/android-developers/722c2364-7768-4bb8-a511-3fc585e6b75f%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
<Anterior por Tema] Tema Actual [Siguiente por Tema>
  • [android-developers] Por qué es sólo el último elemento en un ArrayList mostrado en RecyclerView?, Jeff Biss <=