0

RecyclerView私はFirebaseデータからロードしました。各項目にあるボタンに機能を追加する必要があります。これはショッピングに商品を追加することですカート。Firebase Recyclerアダプタの各項目ボタンのイベント

リサイクラに複数のアイテムがある場合、ボタンをクリックするとアイテムが正しく追加されますが、他のアイテムは追加できなくなるため、問題が発生します。

私がしたいのは、それぞれのアイテムに対してonclikを実行することです。それは明らかに1回だけです。

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

あなたの質問は明確ではありません..あなたはpropulateviewholder '上記adapter'割り当て'から始まるコードを投稿することができます'と質問をサンプル/スクリーンショットで更新してください。 –

+0

アイテムがカートに追加されているかどうかを確認する必要がありますが、追加されているかどうかを確認する方法はわかりません。商品がカートに追加されているかどうかを確認するには –

+0

こんにちは、私はポルトガル語を話す。 –

答えて

0

で、あなたはこのラインをチェックする必要がありますか?

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

    } 

私は、変数このmEstado_pedidosについてはよく分からないが、それはそれはおそらく「sin_pedidos」として初期化されますので、最初の時間を動作しますが、それは、その後の「if」ブロック内の別の何かになりますように見えます。基本的にOnClickListenerはうまく動作しますが、mEstado_pedidosは最初に "sin_pedidos"に戻ることはないので、 "if"ブロックは機能しません。

EDITでは、Googleといくつかの行を翻訳した後、これはショッピングカードの一種であると理解しています。また、RecyclerViewのオブジェクトが既にカートに入っているかどうかを確認する必要があります。その場合は:

-LEtのあなたは、このREFと、データベース内の「アイテムノード」からあなたリサイクルビューを移入していると言う:

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

各項目のリストであり、それは

自分のIDです

-LEtのは、あなたが

を追加したいすべての項目のidを追加しますユーザーのカートがこのノードの内部

DatabaseReference myCartRef = FirebaseDatabase.getInstance().getReference().child("Carts").child(my_user_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); 
       } 
      } 
+0

はい、そうですが、recyclerviewの各項目を変数(con_pedido)または(sin_pedido)をリッスンするにはどうすればよいですか? –

+0

最初に「mEstado_pedidos」と宣言しました。何らかの価値があるかどうかをチェックする必要があるのはなぜですか?この変数の詳細を教えてください。 –

+0

翻訳後に私の答えを編集しました –

関連する問題