android - 使用 TextWatcher 时退格键无法正常工作

标签 android android-edittext textwatcher backspace

我需要格式化输入到 EditText 中的货币值,所以我使用了 TextWatcher 但现在我在软键盘中遇到退格键问题。

通常,如果您按住键盘上的backspace键,它会不断删除EditText中的字符,直到出现什么都没有了。添加 TextWatcher 后,您需要手动按下退格按钮多次才能完全摆脱所有字符作为holding它不再有效

我该如何解决?

public class NumberTextWatcher implements TextWatcher {
    private final EditText et;

    public NumberTextWatcher(EditText et) {
        this.et = et;
    }

    @Override
    public void afterTextChanged(Editable s) {
        et.removeTextChangedListener(this);

        try {
            String originalString = s.toString();

            long longval;
            if (originalString.contains(",")) {
                originalString = originalString.replaceAll(",", "");
            }
            longval = Long.parseLong(originalString);

            DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(Locale.US);
            formatter.applyPattern("#,###,###,###");
            String formattedString = formatter.format(longval);

            //setting text after format to EditText
            et.setText(formattedString);
            et.setSelection(et.getText().length());
        } catch (NumberFormatException nfe) {
            nfe.printStackTrace();
        }

        et.addTextChangedListener(this);
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {

    }
}

最佳答案

根据 afterTextChanged(Editeable s)文档,此 EditText 上发生的任何更改都将从此回调中得到通知,并且很明显,此回调锁定退格回调,以便根据需要重新格式化文本 "#, ###,###,###"

适当的修复:您需要继续处理您的代码 only and only if the input wasn't the backspace key ,即:

   @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        if (after < count) {
            isBackspaceClicked = true;
        } else {
            isBackspaceClicked = false;
        }
    }

  @Override
    public void afterTextChanged(Editable s) {
        if (!isBackspaceClicked) {
            // Your current code
        }
     }

关于android - 使用 TextWatcher 时退格键无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57419773/

相关文章:

Android 支持库和 Firebase SDK 许可归属

java - 通过着色器获得晕影效果

android - EditText onLongClick();隐藏剪切/复制/全选栏

java - 在 EditText 上使用 TextWatcher 在 android 中实时计算总数和总和?

java - 当 EditText 中只有一个字符时防止退格

mvvm - 使用TextWatcher获取editText的旧值

android - 5dp 的 'padding' 处不允许使用整数类型

android - 所有组件 id 更改为随机数

java - 从 onclick 函数获取 EditText 值

android - 如何在 Android 中的 Edittext 上设置占位符并在用户未输入任何输入时使用它?