在开发中遇到一个问题,关于 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();
}
});