当我按下号码时如何使用EditText onTextChanged事件?

Ria*_*Ria 44 android android-edittext

我有一个EditText"text = 0.00".当我按下数字3时,应该是0.03第二次当我按下数字5时,文本应该是0.35.而且35.0,35.09像这样.在EditText最初具有的价值0.00.

这些都是用同样的方法完成的EditText.

我该如何实现这一目标?我已经尝试使用addTextChangedListener()TextWatcher().

Kha*_*aza 93

你也可以试试这个:

EditText searchTo = (EditText)findViewById(R.id.medittext);
searchTo.addTextChangedListener(new TextWatcher() {
    @Override
    public void afterTextChanged(Editable s) {
        // TODO Auto-generated method stub
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        // TODO Auto-generated method stub
    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        doSomething();
    } 
});
Run Code Online (Sandbox Code Playgroud)

  • 您无法阻止在setText事件上调用onTextChanged.你必须自己做,比如使用一些在设置文本之前设置为true的布尔值,并在ontextchanged上,检查该布尔值并决定是否继续使用onTextChanged事件.另一个解决方案是在设置文本之前删除TextChangeListener,并在设置文本后再次设置它. (5认同)
  • 当我做setText()时再次调用onTextChanged,如何防止? (4认同)

Rol*_*no1 37

您选择了正确的方法.你必须与TextWatcher和覆盖扩展类afterTextChanged(),beforeTextChanged(),onTextChanged().

您必须在afterTextChanged()方法中编写所需的逻辑,以实现您所需的功能.

  • 当我做setText()时再次调用afterTextChanged,如何防止这种情况? (3认同)

M. *_*han 8

在这里,我写了类似于你需要的东西:

    inputBoxNumberEt.setText(".     ");
    inputBoxNumberEt.setSelection(inputBoxNumberEt.getText().length());
    inputBoxNumberEt.addTextChangedListener(new TextWatcher() {

        boolean ignoreChange = false;

        @Override
        public void afterTextChanged(Editable s) {
        }

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

        @Override
        public void onTextChanged(CharSequence s, int start,
                                  int before, int count) {
            if (!ignoreChange) {
                String string = s.toString();
                string = string.replace(".", "");
                string = string.replace(" ", "");
                if (string.length() == 0)
                    string = ".     ";
                else if (string.length() == 1)
                    string = ".  " + string;
                else if (string.length() == 2)
                    string = "." + string;
                else if (string.length() > 2)
                    string = string.substring(0, string.length() - 2) + "." + string.substring(string.length() - 2, string.length());
                ignoreChange = true;
                inputBoxNumberEt.setText(string);
                inputBoxNumberEt.setSelection(inputBoxNumberEt.getText().length());
                ignoreChange = false;
            }
        }
    });
Run Code Online (Sandbox Code Playgroud)

  • Shoule将逻辑放入"afterTextChanged"..来自关于"onTextChanged"的文档 - "尝试从此回调中对s进行更改是错误的" (3认同)