如何将按钮绑定到 recyclerview 中的块

How to bind a button to a block in recyclerview

我有一个RecyclerView。 一个块包含来自多个改造响应的行和按钮。 当您单击该块时,该块有一个 ImageView,应删除该块。 但它并没有删除它所在的块,而是顺便将它们添加到数据库中。 如何将此按钮绑定到它所在的块。 他们都有一个link个人号码。

这是图像按钮方法:

    public void DeletePn() {
        DeletePnRequest deletePnRequest = new DeletePnRequest();
        deletePnRequest.setPnumber(this.pnumber.trim());
        Call<DeletePnResponse> deletePnResponseCall = ApiClient.getUserService().delPn(deletePnRequest, token);
        deletePnResponseCall.enqueue(new Callback<DeletePnResponse>() {
            @Override
            public void onResponse(Call<DeletePnResponse> call, Response<DeletePnResponse> response) {
                if(response.isSuccessful()){
                    DeletePnResponse deletePnResponse = response.body();
                    assert deletePnResponse != null;
                    msg = deletePnResponse.getMessage();
                    Toast.makeText(PersonalNumberActivity.this, msg, Toast.LENGTH_LONG).show();
                    recreate();
                } else {
                    Toast.makeText(PersonalNumberActivity.this, "Error " + response.code(), Toast.LENGTH_LONG).show();
                }
            }
        
            @Override
            public void onFailure(Call<DeletePnResponse> call, Throwable t) {
        
            }
        });
    }

这是 RecyclerView 适配器

        private List<PersNumResponse> persNumResponseList;
        private Context context;
        
        public void setData(List<PersNumResponse> persNumResponseList) {
            this.persNumResponseList = persNumResponseList;
            notifyDataSetChanged();
        }
    
        @NonNull
        @Override
        public AdapterVH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            context = parent.getContext();
            return new Adapter.AdapterVH(LayoutInflater.from(context).inflate(R.layout.recycler_view_row, parent, false));
        }
    
        @Override
        public void onBindViewHolder(@NonNull AdapterPn4PayVH holder, int position) {
            PersNumResponse persPayResponse = persNumResponseList.get(position);

    
            String pnumber = persNumResponse.getPnumber();
            String city = persNumResponse.getCity();
            String street = persNumResponse.getStreet();
            String house = persNumResponse.getHouse();
    
            holder.pnumber.setText(pnumber);
            holder.city.setText(city);
            holder.street.setText(street);
            holder.house.setText(house);
        }
    
        @Override
        public int getItemCount() {
            return persNumResponseList.size();
        }
    
        public class AdapterVH extends RecyclerView.ViewHolder {
    
            TextView pnumber;
            TextView city;
            TextView street;
            TextView house;
    
            public AdapterVH(@NonNull View itemView) {
                super(itemView);
                pnumber = itemView.findViewById(R.id.pnumber);
                city = itemView.findViewById(R.id.city);
                street= itemView.findViewById(R.id.street);
                house = itemView.findViewById(R.id.house);
    //this button
                del_pn_btn = itemView.findViewById(R.id.del_pn_btn);
    
                del_pn_btn.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if(context instanceof PersonalNumberActivity){
                            ((PersonalNumberActivity)context).DeletePn();
                        }
                    }
                });
            }
        }

尝试将 pnumber 值添加为 DeletePn 方法的参数并移动 Button 的初始化 setOnClickListeneronBindViewHolder 方法中:

    public void DeletePn(String pnumber) {
        ...
        deletePnRequest.setPnumber(pnumber.trim());
        ...
    }

回收器视图适配器

        @Override
        public void onBindViewHolder(@NonNull AdapterPn4PayVH holder, int position) {
            PersNumResponse persPayResponse = persNumResponseList.get(position);

            String pnumber = persNumResponse.getPnumber();
            String city = persNumResponse.getCity();
            String street = persNumResponse.getStreet();
            String house = persNumResponse.getHouse();
    
            holder.pnumber.setText(pnumber);
            holder.city.setText(city);
            holder.street.setText(street);
            holder.house.setText(house);

            holder.del_pn_btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(context instanceof PersonalNumberActivity){
                        ((PersonalNumberActivity)context).DeletePn(pnumber);
                    }
                }
            });
        }
    
        ...
    
        public class AdapterVH extends RecyclerView.ViewHolder {
    
            TextView pnumber;
            TextView city;
            TextView street;
            TextView house;
            Button del_pn_btn;
    
            public AdapterVH(@NonNull View itemView) {
                super(itemView);
                pnumber = itemView.findViewById(R.id.pnumber);
                city = itemView.findViewById(R.id.city);
                street= itemView.findViewById(R.id.street);
                house = itemView.findViewById(R.id.house);
                del_pn_btn = itemView.findViewById(R.id.del_pn_btn);
            }
        }