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