0

When I click on the "accept" button of a cardview, it generates the event in another cardview. The view returns me a list of requests, each cardview has an accept and reject button. It happens to me that when I click on the accept button of the first element, it accepts the last element

Here is what I tried

RequestAdapter.java


public class RequestAdapter extends FirestoreRecyclerAdapter<Request, RequestAdapter.ViewHolder> {
    private ArrayList<Volunteer> mVolunteer = new ArrayList<>();
    FirebaseFirestore mFirestore = FirebaseFirestore.getInstance();
    String idVolunteer, idOrganization, documentPendingID;
    public RequestAdapter(@NonNull FirestoreRecyclerOptions<Request> options){
        super(options);
    }

    @Override
    protected void onBindViewHolder(@NonNull ViewHolder holder, int position, @NonNull Request request) {
        holder.txtNameSurname.setText(request.getFullName());
        holder.txtStatusRequest.setText("Solicitud pendiente de aceptación");
        holder.txtDateRequest.setText(request.getDate());
        idVolunteer = request.getVolunteerId();
        idOrganization = request.getOrganizationId();

        mFirestore.collection("pendingVolunteerRequests")
                .whereEqualTo("organizationId", idOrganization)// <-- This line
                .get()
                .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<QuerySnapshot> task) {
                        if (task.isSuccessful()) {
                            for (DocumentSnapshot document : task.getResult()) {
                                documentPendingID = document.getId();
                                Log.e("docid", documentPendingID);
                            }
                        }
                    }
                });

        holder.btnOk.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                DocumentReference volunteerRef = mFirestore.collection("organizations").document(idOrganization);
                volunteerRef.update("volunteers", FieldValue.arrayUnion(idVolunteer));
                DocumentReference organizationsRef = mFirestore.collection("volunteers").document(idVolunteer);
                organizationsRef.update("organizationId", idOrganization);

                mFirestore.collection("pendingVolunteerRequests").document(documentPendingID)
                        .delete()
                        .addOnSuccessListener(new OnSuccessListener<Void>() {
                            @Override
                            public void onSuccess(Void aVoid) {
                            }
                        })
                        .addOnFailureListener(new OnFailureListener() {
                            @Override
                            public void onFailure(@NonNull Exception e) {
                            }
                        });

                Log.e("idOrg", idOrganization);
                Log.e("idVol", idVolunteer);
            }
        });
        holder.btnNoOk.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mFirestore.collection("pendingVolunteerRequests")
                        .whereEqualTo("organizationId", idOrganization) // <-- This line
                        .get()
                        .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                            @Override
                            public void onComplete(@NonNull Task<QuerySnapshot> task) {
                                if (task.isSuccessful()) {
                                    for (DocumentSnapshot document : task.getResult()) {
                                        documentPendingID = document.getId();
                                        Log.e("docid", documentPendingID );
                                        mFirestore.collection("pendingVolunteerRequests").document(documentPendingID)
                                                .delete()
                                                .addOnSuccessListener(new OnSuccessListener<Void>() {
                                                    @Override
                                                    public void onSuccess(Void aVoid) {
                                                    }
                                                })
                                                .addOnFailureListener(new OnFailureListener() {
                                                    @Override
                                                    public void onFailure(@NonNull Exception e) {
                                                    }
                                                });
                                    }
                                }
                            }
                        });
            }
        });

    }


    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.pending_request, viewGroup, false);
        return new ViewHolder(view);

    }

    public class ViewHolder extends RecyclerView.ViewHolder{

        TextView txtNameSurname;
        TextView txtDateRequest;
        TextView txtStatusRequest;
        Button btnOk;
        Button btnNoOk;

        public ViewHolder(@NonNull View itemView){
            super(itemView);

            txtNameSurname = itemView.findViewById(R.id.txtNameSurname);
            txtDateRequest = itemView.findViewById(R.id.txtDate);
            txtStatusRequest = itemView.findViewById(R.id.txtStatus);
            btnOk = itemView.findViewById(R.id.btnAccept);
            btnNoOk = itemView.findViewById(R.id.btnDecline);

        }

    }

}

I need that when I click on accept of the first cardview I save the data of that cardview and not of the last one as it has been happening to me

  • If you encounter problems, it's best to create a [MCVE](https://stackoverflow.com/help/mcve) when posting a question. You posted more than **300** (three hundred) lines of code for this issue. That's a lot for people to parse and try to debug online. Please edit your question and isolate the problem, in that way you increase your chances of being helped. Please take a moment and read [how to ask a question](https://stackoverflow.com/help/how-to-ask). – Alex Mamo Nov 09 '22 at 15:59
  • Check this post, I think that could be useful https://stackoverflow.com/questions/27081787/onclicklistener-for-cardview – fede Nov 09 '22 at 23:13

0 Answers0