我有一个编辑文字。我想在其中输入小数值。
这是我输入第一个号码的时候。它应该是这样的:.01
然后我输入了第二个号码。它应该是这样的:.12
然后是第三个。它应该是这样的:1.23
它会像这样....如何在 Android平台中实现此方案。有什么想法吗?
编辑:
我试过了。但是当我将字符串附加到EditText时,我得到了StackOverFlowError。我在下面发布了我的代码:
amount.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {
try {
if (s.length() == 1) {
Float f = Float.parseFloat(s.toString()) / 100;
System.out.println(String.valueOf(f));
amount.setText("");
amount.append(String.valueOf(f));//getting stackoverflow error here
} else if (s.length() > 1) {
String str = s.toString().replace(".", "");
Float f = Float.parseFloat(str) / 100;
System.out.println(String.valueOf(f));
amount.setText("");
amount.append(String.valueOf(f));
}
} catch (Exception e) {
}
}
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
public void onTextChanged(CharSequence s, int start, int before,
int count) {
}
});
答案 0 :(得分:1)
看,你正在为一个元素实现一个TextChangedKListener,你要在其中更改元素文本。
所以,在这一行
amount.setText("");
amount.append(String.valueOf(f))
正在调用您的TextWatcher实现(正如您可以看到here和here)。
正如您在第二个链接上看到的那样,afterTextChanged
方法的API文档会警告您进入无限循环的风险:
小心不要陷入无限循环,因为你所做的任何改变都会导致这个方法再次被递归调用
TextWatcher API文档中的自我afterTextChanged说明建议使用此方法进行处理:
你没有被告知改变的地点 放置因为其他afterTextChanged() 方法可能已经取得了其他方法 更改并使抵消无效。 但如果你需要知道, 你可以 使用setSpan(Object,int,int,int) onTextChanged(CharSequence,int,int, int)标记你的地方,然后看 从这里开始跨度 。