我正在制作android应用,并且我已编辑了两个用于增加和减少按钮的文本
,当我第一次单击增大或减小按钮时,它不起作用,但从第二次开始起作用 例如,如果编辑文本字段中的数字在我按增加时为50,而在我再次按增加时仍为50,则它更改为51,然后再次更改为52,依此类推 这是我的两个按钮的Java代码
add.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (quantityEdit.getText().toString().equals("") || quantityEdit.getText().toString() == null) {
quantityEdit.setText("0");
} else {
int a = Integer.parseInt(quantityEdit.getText().toString());
int b = a + 1;
quantityEdit.setText(String.valueOf(b));
}
}
});
sub.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
int a = Integer.parseInt(quantityEdit.getText().toString());
if (a >= 1) {
int b = a - 1;
quantityEdit.setText(String.valueOf(b));
} else {
quantityEdit.setText("0");
}
}
});
答案 0 :(得分:0)
您似乎在检查“ add”中是否为空字符串或null,而不是“ sub”中。如Michael Krause所述,您应该使用TextUtils.isEmpty(),并在执行添加或子操作之前设置默认值。
如果您要在其他地方设置默认值,请显示代码。
答案 1 :(得分:0)
考虑像这样重构代码
add.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
quantityEdit.setText(String.valueOf(getIntVal(quantityEdit) + 1));
}
});
sub.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
int value = getIntVal(quantityEdit);
if (value > 0) {
value--;
}
quantityEdit.setText(String.valueOf(value));
}
});
// helper method to get the integer value of a TextView
private int getIntVal(TextView textView) {
CharSequence rawValue = textView.getText();
int value;
if (!TextUtils.isEmpty(rawValue)) {
try {
value = Integer.parseInt(rawValue.toString());
} catch (NumberFormatException e) {
value = 0;
// TODO log / notify user
}
} else {
value = 0;
}
}
通过这种方式,您的初始化可以在一个地方进行处理,而且更加清楚。
无论如何,您的第一个条件是错误的。尝试访问该对象(它是向后的)后,您需要执行空检查。您检查过日志了吗?这可能会引发一个空值异常,并导致第一次点击“丢失”。