我有一个TextWatcher,当所有EditTexts length()都是!= 0时启用一个按钮。我现在想要添加能力以确保数字是正数。我尝试在另一个if()中放入一个新的if()来检查是否> 0但是由于某种原因它不起作用。
所以我需要的是确保所有的EditText都不为空,并且输入了正数,然后启用该数字。
这就是我所拥有的,
public TextWatcher localWatcher = 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) {
}
// When the text is edited, I want to check if all textViews are filled
@Override
public void afterTextChanged(Editable s) {
// Check if any of the TextViews are == 0, if so the button remains disabled
if (et1local.getText().toString().length() == 0
|| et2local.getText().toString().length() == 0
|| et3local.getText().toString().length() == 0
|| et4local.getText().toString().length() == 0
|| et5local.getText().toString().length() == 0
|| et6local.getText().toString().length() == 0
|| et7local.getText().toString().length() == 0
|| et8local.getText().toString().length() == 0
|| et9local.getText().toString().length() == 0) {
if(et1local){
localCalculateButton.setEnabled(false);
}
}
// When all are filled enable the button
else {
localCalculateButton.setEnabled(true);
}
}
};
这很好但是如何检查数字是否为正,任何帮助都会非常感谢。
答案 0 :(得分:43)
你应该使用EditText的attr:
android:digits="0123456789."
android:inputType="number"
http://developer.android.com/reference/android/widget/TextView.html#attr_android:digits
因此,用户只能输入没有减号的数字。
更新: 这样的事情,以防止从0开始第一次签到:
editText.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable edt) {
if (edt.length() == 1 && edt.toString().equals("0"))
editText.setText("");
}
// ...
});
答案 1 :(得分:1)
对于每个EditText
,您必须这样做:
if (Integer.parseInt(et1local.getText().toString()) > 0)
执行一项功能以确保它是一个数字
private boolean isPositive(EditText et)
{
try
{
return Integer.parseInt(et.getText().toString()) > 0;
}
catch (Exception e)
{
return false;
}
}
使用它:
if (et1local.getText().toString().length() == 0 || !isPositive(et1local)
|| et2local.getText().toString().length() == 0 || !isPositive(et2local)
// [...]
答案 2 :(得分:0)
这比ToYonos的答案要长得多,但可能有助于理解这些原则。它还简化了你的if块。
private boolean isEditTextEmptyOrNegative(EditText editText) {
// check if editText is empty
if (editText.getText().toString().length() == 0)
return true;
// get text from editText
String text = editText.getText().toString();
try {
// try to parse text to int
int textInt = Integer.valueOf(text);
// if int is > 0, return false (not empty or negative), else return true (int is negative)
if (textInt > 0)
return false;
else
return true;
} catch (NumberFormatException nfe) {
// catch NumberFormatException, text entered is not a valid int, treat it as empty (you may want to handle differently)
return true;
}
}
你的if块会是这样的:
if (isEditTextEmptyOrNegative(et1local) || isEditTextEmptyOrNegative(et2local) || ... )
答案 3 :(得分:0)
只需删除onTextChanged
中的减号。
public void onTextChanged(CharSequence s, int start, int before,
int count) {
et1Local.setText(et1local.getText().toString().replace"-",""));
.....
et9Local.setText(et9local.getText().toString().replace("-".""));
}
答案 4 :(得分:0)
对我来说,只需设置android:inputType="number"
(不包括android:digits
部分)就可以了。
而且,您也可以像前面那样将前导零转换为负数没有问题(我用Integer.valueOf(binding.myEditText.getEditableText().toString())
得到输入)。