我正在进行验证,其中我有一个带输入类型编号的edittext,用于显示在用户购物车中购买的商品数量。我想确保编辑edittext的值时,如果值是“”,“0”或“00”等,只要它是< 1,然后将值设置为“1”。
我已经厌倦了下面的代码:
txtJumlah.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
int jumlah = Integer.parseInt(txtJumlah.getText().toString());
if(txtJumlah.getText().toString().equals("") || jumlah <= 1) {
txtJumlah.setText("1");
}
calculate();
}
});
但它返回java.lang.StackOverflowError:堆栈大小为8MB
任何人都可以帮助我吗?感谢
答案 0 :(得分:2)
当您将文本设置为“1”时,它将再次调用afterTextChanged并再次导致无限循环。尝试把jumlah&lt;而在if语句中则为1。
答案 1 :(得分:1)
替换这个:
if(txtJumlah.getText().toString().equals("") || jumlah <= 1) {
txtJumlah.setText("1");
}
由:
if(txtJumlah.getText().toString().equals("") || jumlah < 1) {
txtJumlah.setText("1");
}
以上解决方案必须解决问题。
优化代码的一个建议:
int jumlah = Integer.parseInt(txtJumlah.getText().toString());
这可能导致ParseException
(如果txtJumlah.getText().toString()
是字符串而不是数字)