关于 CheckBox 和 EditText 在列表中输入后点击CheckBox 遇见的数据错乱问题
在开发中遇到一个问题,关于 CheckBox 和 EditText 在列表中输入后点击CheckBox 遇见的数据错乱问题,EditText千万不要用监听方法去设置 数据如下:
holder.et_box_price.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { // 输入的内容变化的监听 } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { // 输入前的监听 } @Override public void afterTextChanged(Editable s) { // 输入后的监听 if (null != mList && mList.size() > 0) { String price = holder.et_box_price.getText().toString(); openDeliveryBoxBean.setBoxAmount(price); mList.set(position, openDeliveryBoxBean); } } });
一定要做一个弹框例如下面,解决点击CheckBox 时,联动引起数据错乱:
holder.et_box_price.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { InputInfo inputInfo = new InputInfo(); inputInfo.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL | InputType.TYPE_CLASS_NUMBER); inputInfo.setMAX_LENGTH(10); String priceOld = holder.et_box_price.getText().toString().trim(); InputDialog inputDialog = InputDialog.build(ctx, "输入包装费", "", "确定", new InputDialogOkButtonClickListener() { @Override public void onClick(Dialog dialog, String inputText) { if (!StringUtils.isEmpty(inputText)) { dialog.dismiss(); holder.et_box_price.setText(inputText); NewOpenDeliveryBoxBean openDeliveryBoxBean = mList.get(position); openDeliveryBoxBean.setBoxAmount(inputText); mList.set(position, openDeliveryBoxBean); } else { Toasty.warning(ctx, "输入配送费!").show(); } } }, "取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }).setInputInfo(inputInfo); inputDialog.showDialog(); //价格输入限制: InputFilter[] filters = {new EditMoneyInputFilter()}; if (!StringUtils.isEmpty(priceOld)) { inputDialog.getTxtInput().setText(priceOld); inputDialog.getTxtInput().setSelection(0, priceOld.length()); } inputDialog.getTxtInput().setGravity(Gravity.CENTER); inputDialog.getTxtInput().setFilters(filters); inputDialog.getTxtInput().setFocusable(true); inputDialog.getTxtInput().setFocusableInTouchMode(true); inputDialog.getTxtInput().requestFocus(); } });