java - Event in a button of each Item of a Firebase Recycler Adapter -


i have recyclerview loaded firebase data, need add functionality button in each item, add product shopping cart.

the problem have happens when there more 1 item in recycler, since clicking button adds item correctly, others can no longer added.

what want onclik each item , apparently takes me once.

@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) {              }         });     } 

this class 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);     } } 

just taking wild wild guess, have checked lines ?

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

i'm not sure mestado_pedidos variable looks works first time since it's initialized "sin_pedidos" turns in different inside "if" block. onclicklistener works fine "if" block doesn't work since mestado_pedidos never turns "sin_pedidos" after first time.

edit, after translating lines google understood kind of shopping card , need check if object recyclerview on cart or not. if that's case :

-let's populating recycler view "item node" in database ref :

databasereference mylist = firebasedatabase.getinstance().getreference().child("list"); 

each item in list has it's own id

-let's user cart stored @

databasereference mycartref = firebasedatabase.getinstance().getreference().child("carts").child(my_user_id); 

inside node you'll add item id's want add

you declaring

 final string item_id  = getref(position).getkey(); 

so inside onclicklistener can call :

mycartref.addlistenerforsinglevalueevent(new valueeventlistener() {           @override           public void ondatachange(datasnapshot datasnapshot) {                 //if cart reference doesn't have current item                if(datasnapshot.haschild(item_id){                    mycartred.child(item_id).setvalue(true);                 }           } 

Comments

Popular posts from this blog

javascript - Create a stacked percentage column -

Optimising Firebase database by automatically overwriting data -

javascript - Angular UI-Grid customTemplate directive causing rows to load slowly/? -