带输入类型编号的Android EditText使文本更改的值始终> 0
问题描述:
我目前正在进行验证,其中包含inputtype编号的edittext,用于显示用户购物车中购买的物品的数量。我想确保编辑edittext的值时,如果值为“”,“0”或“00”等,只要它是< 1,那么值将被设置为“1”。带输入类型编号的Android EditText使文本更改的值始终> 0
我已经厌倦了下面的代码:
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
谁能帮助我?谢谢
答
替换此:
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()
是字符串,而不是数字)
答
当您将文本设置为“1”时,它将一次又一次地调用afterTextChanged导致无限循环。请尝试将jumlah < 1代入您的if语句中。
txtJumlah.getText()将永远不会返回null。它将始终返回一个空字符串。唯一可能导致NullPointerException的是如果TextView为空。即使你尝试setText(null),它也会将它转换为空字符串。 – Lunkie
同意,更新了答案 –