Android--recycleview子item中checkbox+edittext遇到的问题

在Android的RecyclerView中,当子项包含Checkbox和EditText时,由于复用机制可能导致选择状态同步错误和文本自动填充问题。为避免这个问题,可以尝试禁用复用项或者使用setTag方法进行状态保存。对于EditText,可以通过监听其变化来捕获并处理数据。
摘要由CSDN通过智能技术生成

1、由于recycleview复用机制,checkbox选一个,下面自动选中,edittext自动输入问题:

@Override
    public void onBindViewHolder(ViewHolder viewHolder, int position) {
        //禁止复用,要不数据重复
        viewHolder.setIsRecyclable(false);
        viewHolder.ckPeoplewater.setText(chargeList.get(position).getItem_Name());
        viewHolder.tvPeopleprice.setText(chargeList.get(position).getItem_Price()+"");
        viewHolder.tvPeopleprice1.setText(chargeList.get(position).getSewageFee()+"");
        viewHolder.tvPeopleprice2.setText(chargeList.get(position).getResourceFee()+"");
        viewHolder.etPeoplewater.setText(chargeList.get(position).getItemHighLimit()+"");
        viewHolder.etPeoplewater1.setText(chargeList.get(position).getItemLowLimit()+"");
        chargeList.get(position).setItemHighLimit(Integer.parseInt(viewHolder.etPeoplewater.getText().toString()));

        viewHolder.ckPeoplewater.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked == true) {
                    map.put(position, true);

                    TextWatcher watcher = new TextWatcher() {
                        @Override
                        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2){

                        }
                        @Override
                        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

                        }
                        @Override
                        public void afterTextChanged(Editable editable) {
                            if (!TextUtils.isEmpty(editable.toString())){
                                chargeList.get(position).setItemHighLimit(Integer.parseInt(editable.toString()));
                            }
                            if(editable != null){
                                mOnItemClickListener.onEtRateClick(position,editable.toString());
                            }
                        }
                    };
                    viewHolder.etPeoplewater.addTextChangedListener(watcher);

                    TextWatcher watcher1 = new TextWatcher() {
                        @Override
                        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2){

                        }
                        @Override
                        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

                        }
                        @Override
                        public void afterTextChanged(Editable editable) {
                            if (!TextUtils.isEmpty(editable.toString())){
                                chargeList.get(position).setItemLowLimit(Integer.parseInt(editable.toString()));
                            }
                            if(editable != null){
                                mOnItemClickListener.onEtTotalClick(position,editable.toString());
                            }
                        }
                    };
                    viewHolder.etPeoplewater1.addTextChangedListener(watcher1);

                } else {
                    map.remove(position);
                }

                if (mOnItemClickListener!=null){
                    mOnItemClickListener.onItemClick(position,chargeList,isChecked);
                }
            }
        });
        if (map != null && map.containsKey(position)) {
            viewHolder.ckPeoplewater.setChecked(true);
        } else {
            viewHolder.ckPeoplewater.setChecked(false);
        }


    }

我这个数据少,可以禁用,数据多的回卡顿,通过设置settag来实现,百度有好多;

对edittext监听,获取数据:

public class chargeAdapter extends RecyclerView.Adapter<chargeAdapter.ViewHolder> {

    private Context mContext;
    List<watercharge .ItemsInfoBean> chargeList;
    private OnItemClickListener mOnItemClickListener;
    private Map<Integer, Boolean> map = new HashMap<>();

    public chargeAdapter(Context context,List<watercharge .ItemsInfoBean> chargeList) {
        this.mContext = context;
        this.chargeList = chargeList;
    }
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View view = LayoutInflater.from(mContext).inflate(R.layout.item_charge, viewGroup, false);
        ViewHolder holder = new ViewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(ViewHolder viewHolder, int position) {
        //禁止复用,要不数据重复
        viewHolder.setIsRecyclable(false);
        viewHolder.ckPeoplewater.setText(chargeList.get(position).getItem_Name());
        viewHolder.tvPeopleprice.setText(chargeList.get(position).getItem_Price()+"");
        viewHolder.tvPeopleprice1.setText(chargeList.get(position).getSewageFee()+"");
        viewHolder.tvPeopleprice2.setText(chargeList.get(position).getResourceFee()+"");
        viewHolder.etPeoplewater.setText(chargeList.get(position).getItemHighLimit()+"");
        viewHolder.etPeoplewater1.setText(chargeList.get(position).getItemLowLimit()+"");
        chargeList.get(position).setItemHighLimit(Integer.parseInt(viewHolder.etPeoplewater.getText().toString()));

        viewHolder.ckPeoplewater.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked == true) {
                    map.put(position, true);

                    TextWatcher watcher = new TextWatcher() {
                        @Override
                        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2){

                        }
                        @Override
                        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

                        }
                        @Override
                        public void afterTextChanged(Editable editable) {
                            if (!TextUtils.isEmpty(editable.toString())){
                                chargeList.get(position).setItemHighLimit(Integer.parseInt(editable.toString()));
                            }
                            if(editable != null){
                                mOnItemClickListener.onEtRateClick(position,editable.toString());
                            }
                        }
                    };
                    viewHolder.etPeoplewater.addTextChangedListener(watcher);

                    TextWatcher watcher1 = new TextWatcher() {
                        @Override
                        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2){

                        }
                        @Override
                        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

                        }
                        @Override
                        public void afterTextChanged(Editable editable) {
            
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值