尝试使用 TextWatcher 将 EditText 格式化为具有两个小数位的双精度



我试图在用户开始输入EditText时自动放置小数点后两位。问题是我正在尝试在我正在使用的EditText上设置TextWatcher,因此当它更新字段中的文本时,它会再次递归调用该方法。我得到了一个无限循环。这是我尝试过的:

mTime.addTextChangedListener(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) {
                mTime.removeTextChangedListener(this);
                if(mTime.getText().length() > 2){
                    double amount = Double.valueOf(mTime.getText().toString());
                    amount /= 100.0;
                } 
            }
            @Override
            public void afterTextChanged(Editable editable) {
                mTime.addTextChangedListener(this);
            }

mTime是EditText的名字。我的想法是,一旦我触发了onTextChanged,我就会删除TextChangedListener,更新EditText,然后在afterTextChanged中恢复TextChangedListener。不幸的是,这不起作用。任何想法或帮助将不胜感激。

这应该是一件容易的事。我想我只是想念它

你几乎

是正确的,只需对你的代码进行一些更改:

 mTime.addTextChangedListener(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) {
                mTime.removeTextChangedListener(this);
                if(mTime.getText().length() > 2){
                    double amount = Double.valueOf(mTime.getText().toString());
                    amount /= 100.0;
                } 
                mTime.addTextChangedListener(this);
            }

最新更新