0

Ich habe eine RecyclerView geladen von Firebase Daten, ich muss eine Funktionalität zu einer Schaltfläche hinzufügen, die in jedem Element ist, die ein Produkt zum Einkaufen hinzufügen soll Wagen.Ereignis in einer Taste jedes Elements eines Firebase-Recycler-Adapter

Das Problem, das ich habe, tritt auf, wenn mehr als ein Element im Recycler vorhanden ist, da das Klicken auf die Schaltfläche ein Element korrekt hinzufügt, die anderen jedoch nicht mehr hinzugefügt werden können.

Was ich will, ist die onclik für jeden Artikel zu tun und anscheinend dauert es nur einmal.

@Override 
protected void populateViewHolder(final FriendsViewHolder viewHolder, final Menu model, int position) { 

     final String item_id = getRef(position).getKey(); 

     final String rest_id = getIntent().getStringExtra("rest_id"); 

     viewHolder.setName(model.getNombre()); 
     viewHolder.setDescrpcion(model.getDescripcion()); 
     viewHolder.setImage(getApplicationContext(),model.getThumb_image()); 
     viewHolder.agregaBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (mEstado_pedidos.equals("sin_pedidos")){ 

        Map pedidoMap = new HashMap(); 
        pedidoMap.put("Solicitud_Pedido/"+mCurrent_user.getUid() + "/" + rest_id + "/" + item_id + "/tipo_pedido", "solicitado"); 
        pedidoMap.put("Solicitud_Pedido/"+rest_id + "/" + mCurrent_user.getUid() + "/" + item_id +"/tipo_pedido", "recibido"); 

        mRootRef.updateChildren(pedidoMap, new DatabaseReference.CompletionListener() { 
         @Override 
         public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) { 

          if (databaseError != null){ 

           Toast.makeText(getApplicationContext(), "Hubo un error al enviar la solicitud" , Toast.LENGTH_SHORT).show(); 
          } 
          FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 

          fab.setEnabled(true); 
          fab.setVisibility(View.VISIBLE); 

          mEstado_pedidos = "con_pedido"; 
          Button agregaBtn = (Button)findViewById(R.id.btn_agregar); 
          agregaBtn.setText("Eliminar del carrito"); 
         } 
        }); 
       } 
      } 
     }); 

     final String list_user_id = getRef(position).getKey(); 

     viewHolder.mView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

      } 
     }); 
    } 

Dies ist die Klasse Viewholder

public static class FriendsViewHolder extends RecyclerView.ViewHolder { 

    View mView; 
    Button agregaBtn; 


    public FriendsViewHolder(View itemView) { 
     super(itemView); 

     mView = itemView; 
     agregaBtn = (Button)mView.findViewById(R.id.btn_agregar); 
    } 


    public void setName(String nombre){ 

     TextView mName = (TextView) mView.findViewById(R.id.nombre_item); 
     mName.setText(nombre); 
    } 

    public void setDescrpcion(String descrpcion){ 

     TextView mDescripcion = (TextView) mView.findViewById(R.id.descripcion_item); 
     mDescripcion.setText(descrpcion); 
    } 

    public void setImage(final Context context, String thumb_image){ 

     ImageView mImagen = (ImageView) mView.findViewById(R.id.imagen_item); 
     Picasso.with(context).load(thumb_image).into(mImagen); 
    } 
} 
+0

Ihre Frage nicht klar ist .. Können Sie den Code ab 'adapter' Zuordnung über' propulateviewholder schreiben 'und update Frage mit einem Beispiel/Screenshots wenn möglich .. –

+0

Sie müssen überprüfen, ob Artikel in den Warenkorb hinzugefügt wird, sehe ich nicht, wie Sie überprüfen, ob hinzugefügt wird oder nicht. Wie überprüfen Sie, ob Artikel in den Warenkorb gelegt wird –

+0

Hallo + Bruno Ferreira hat es sich angemeldet? Para ponder explicar mejor porque no se hablar bien inglés –

Antwort

0

Nur eine wilde wilde Vermutung nehmen, haben Sie diese Zeilen überprüft?

if (mEstado_pedidos.equals("sin_pedidos"){ 
    //some logic 
    mEstado_pedidos = "con_pedido"; 

    } 

Ich bin nicht sicher über diese mEstado_pedidos variabel, aber es sieht aus wie es das erste Mal funktioniert, da es wahrscheinlich als „sin_pedidos“ initialisiert ist, aber es dreht sich dann in etwas anderes in der „if“ -Block. Grundsätzlich funktioniert der OnClickListener gut, aber der "if" -Block funktioniert nicht, da mEstado_pedidos nach dem ersten Mal nie wieder zu "sin_pedidos" zurückkehrt.

BEARBEITEN, nachdem ich einige Zeilen mit Google übersetzt habe, habe ich verstanden, dass dies eine Art Einkaufskarte ist, und Sie müssen prüfen, ob das Objekt vom RecyclerView bereits auf dem Einkaufswagen ist oder nicht. Wenn das der Fall ist:

-Let sagen, dass Sie Ihre Recycler Ansicht von einem „Punkt-Knoten“ mit diesem ref in der Datenbank bevölkern:

DatabaseReference myList = FirebaseDatabase.getInstance().getReference().child("List"); 

Jedes Element in der Liste hat es eigene ID

-Let sagen, dass Ihre Benutzer Warenkorb bei

DatabaseReference myCartRef = FirebaseDatabase.getInstance().getReference().child("Carts").child(my_user_id); 

in diesem Knoten gespeichert finden Sie alle Artikel IDs hinzufügen, die Sie hinzufügen möchten

Sie sind bereits

final String item_id = getRef(position).getKey(); 

So in der OnClickListener erklären können Sie anrufen:

myCartRef.addListenerForSingleValueEvent(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 

       //if your cart reference doesn't have the current item 
       if(dataSnapshot.hasChild(item_id){ 
        myCartRed.child(item_id).setValue(true); 
       } 
      } 
+0

Ja, so, aber wie kann ich jedes Element in der Recyclerview hören für die Variable (con_pedido) oder (sin_pedido)? –

+0

wäre es nützlich, um zu sehen, wo Sie erklärt "mEstado_pedidos" an erster Stelle und warum/wann Sie überprüfen müssen, ob es einen Wert hat ... geben Sie uns mehr Informationen über diese Variable –

+0

bearbeitet meine Antwort nach einer Übersetzung –

Verwandte Themen