我试图在用户开始输入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);
}