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
Post a Comment