为了账号安全,请及时绑定邮箱和手机立即绑定

单击 RecyclerView 项目后禁用按钮时出现问题

单击 RecyclerView 项目后禁用按钮时出现问题

牧羊人nacy 2023-06-08 19:17:00
单击后,我想禁用 RecyclerView 中某些项目的两个按钮。我在单击后更新的 POJO 类中添加了布尔值来保持按钮 (isClicked) 的状态。@Override    public void onBindViewHolder(final NewsViewHolder holder, final int position) {        if(Fragment.List.get(holder.getAdapterPosition()).isTrueBtnClicked){            holder.btnPositive.setEnabled(false);            holder.btnPositive.setBackgroundResource(R.color.darkGray);            holder.btnNegative.setEnabled(false);            holder.btnNegative.setBackgroundResource(R.color.darkGray);        }else{            //to do        }        //used position instead getAdapterPosition()        if(BlicFragment.List.get(position).isLieBtnClicked){            holder.btnPositive.setEnabled(false);            holder.btnPositive.setBackgroundResource(R.color.darkGray);            holder.btnNegative.setEnabled(false);            holder.btnNegative.setBackgroundResource(R.color.darkGray);        }else{            //holder.btnPositive.setEnabled(false);        }        holder.btnPositive.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                //SendPost postingToDb = new SendPost();                //postingToDb.sendPost(sTitle, sDesc, url, sDate, sImgUrl[0], 1, 0, "Blic");                JSONPlaceHolderAPI mAPIService;                mAPIService = ApiUtils.getAPIServiceFetch();                mAPIService.getNews(url).enqueue(new Callback<Result>() {                    @Override                    public void onResponse(Call<Result> call, Response<Result> response) {                        if(response.body().getSuccess()==1){                            isPositiveBtnClicked(holder);                        }else{                            isPositiveBtnClicked(holder);                        }                    }我正面临那个按钮被禁用,接下来的五个按钮不受影响。但是被点击按钮的每六个按钮都会被禁用。最终所有其他人都被禁用。
查看完整描述

1 回答

?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

是的,这正在发生,因为 Recylerview 总是重复使用或渲染从屏幕出来的屏幕视图。因此,请确保您应该完全将视图恢复正常,就像在某些情况下视图正在更改以使用某些条件启用状态那么必须if()有else使它们禁用的部分。例如在你的情况下......


        if(Fragment.List.get(holder.getAdapterPosition()).isTrueBtnClicked){

            holder.btnPositive.setEnabled(false);

            holder.btnPositive.setBackgroundResource(R.color.darkGray);

            holder.btnNegative.setEnabled(false);

            holder.btnNegative.setBackgroundResource(R.color.darkGray);


        }else{

            holder.btnPositive.setEnabled(true);

            holder.btnPositive.setBackgroundResource(R.color.greenEnable);

            holder.btnNegative.setEnabled(true);

            holder.btnNegative.setBackgroundResource(R.color.greenEnable);

        }


查看完整回答
反对 回复 2023-06-08
  • 1 回答
  • 0 关注
  • 133 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信