[英]Event in a button of each Item of a Firebase Recycler Adapter
我有一個從Firebase數據加載的RecyclerView
,我需要向每個項目中的按鈕添加功能,這就是將產品添加到購物車中。
當回收站中有多個項目時,由於單擊該按鈕正確添加了一個項目,而其他項目無法再添加,因此發生了我遇到的問題。
我想要的是對每個項目執行onclik
,顯然只需要我一次。
@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) {
}
});
}
這是類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);
}
}
只是一個瘋狂的猜測,您檢查了這行嗎?
if (mEstado_pedidos.equals("sin_pedidos"){
//some logic
mEstado_pedidos = "con_pedido";
}
我不確定這個mEstado_pedidos變量,但它似乎是第一次工作,因為它可能已初始化為“ sin_pedidos”,但隨后在“ if”塊中輸入了一些不同的內容。 基本上,OnClickListener可以正常工作,但是“ if”塊不起作用,因為mEstado_pedidos永遠不會在第一次之后變回“ sin_pedidos”。
編輯,用谷歌翻譯了幾行后,我知道這是某種購物卡,您需要檢查RecyclerView中的對象是否已經在購物車中。 如果是這樣的話:
-假設您正在使用此ref從數據庫中的“項目節點”填充回收者視圖:
DatabaseReference myList = FirebaseDatabase.getInstance().getReference().child("List");
列表中的每個項目都有自己的ID
-假設您的用戶購物車存儲在
DatabaseReference myCartRef = FirebaseDatabase.getInstance().getReference().child("Carts").child(my_user_id);
在此節點內,您將添加所有要添加的商品ID
您已經在聲明
final String item_id = getRef(position).getKey();
因此,您可以在OnclickListener中調用:
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);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.