簡體   English   中英

Firebase回收器適配器的每個項目的按鈕中的事件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM