【问题标题】:How to bind a button to a block in recyclerview如何将按钮绑定到recyclerview中的块
【发布时间】:2021-05-15 09:00:44
【问题描述】:

我有一个RecyclerView。 一个块包含来自多个改造响应的线条和按钮。 当您单击该块时,该块有一个 ImageView,该块应该被删除。 但它不会删除它所在的块,但顺便说一下,它们已添加到数据库中。 如何将此按钮绑定到它所在的块。 他们都有一个个人号码的链接。

这是图片按钮方法:

    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();
                        }
                    }
                });
            }
        }

【问题讨论】:

    标签: java android android-recyclerview retrofit


    【解决方案1】:

    尝试添加pnumber 值作为DeletePn 方法的参数并移动按钮的初始化 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);
                }
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-21
      • 2012-06-20
      • 2011-05-30
      • 2014-03-23
      • 1970-01-01
      • 2012-10-30
      • 2011-03-29
      • 1970-01-01
      相关资源
      最近更新 更多