我有一个TextWatcher,它在EditText值前添加一个美元符号(它是一个价格字段)。一切正常,但如果你输入两个第一个数字足够快,第二个数字就不会出现。一旦你超过前两位数就可以了。如果你慢慢键入它们(几乎一秒钟之间),它也可以正常工作。 这是我正在使用的TextWatcher代码:
@AfterTextChange(R.id.add_itemPrice) // android annotations way
void addDollar(Editable e) {
if (priceFieldBeingModified) {
return;
}
if (!e.toString().startsWith(CURRENCY_SYMB)) {
priceFieldBeingModified = true;
String newValue = CURRENCY_SYMB + e;
priceField.setText(newValue);
if (priceField.getSelectionStart() == 0) {
// move the cursor to the end
priceField.setSelection(priceField.getText().length());
}
priceFieldBeingModified = false;
}
}
priceField EditText具有固定的layout_width / layout_height(以dp为单位)。从我可以收集到的,setText()/ getText()太贵了,但在这种情况下我不知道如何避免它们。
priceField.getText().insert(0, CURRENCY_SYMB)
由于某种原因没有做任何事情。
修改: 看起来问题只发生在Android 4.3(或Xperia Z手机)上。尝试了4.1手机 - 就像魅力一样。
任何建议都会受到赞赏,我对这个建议缺乏想法!
答案 0 :(得分:0)
这对我来说很好:
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
if(s.toString().equalsIgnoreCase(""))
{
}
else if (!s.toString().startsWith("$")) {
priceFieldBeingModified = true;
String newValue = "$" + s;
e.setText(newValue);
if (e.getSelectionStart() == 0) {
// move the cursor to the end
e.setSelection(e.getText().length());
}
priceFieldBeingModified = false;
}
它检查字符串是否为空并且它不以" $"开头,然后它添加" $"在开始时将光标移动到结束。