Reputation: 421
I am using editTexts to calculate some values in real time, so I am using textWatcher:
@Override
public void afterTextChanged(Editable s) {
if (editTextNumer1.hasFocus()) {
if (s.length() != 0) {
number1 = Float.parseFloat(editTextNumber1.getText().toString());
number2 = (float) (number1 * 1.66));
number3 = (float) (number1 + 23.175);
}
editTextNumber2.setText(String.format(Locale.getDefault(), "%.3f", number2));
editTextNumber3.setText(String.format(Locale.getDefault(), "%.3f", number3));
.
.
.
I need to use negative values too and I know I can't parse "-" sign, this is why app crashes after pressing "-" on the keyboard. Just cannot find my way around it. Can someone help please? Thanks
Upvotes: 0
Views: 405
Reputation: 86
You can't parse '-' sign as Integer/Float because it is character.
What you can do is to check the first character in the string and check if it contains '-' sign or it is just a number.
@Override
public void afterTextChanged(Editable s) {
if (editTextNumer1.hasFocus()) {
if (s.toString().length() != 0) {
float number1 =0f;
int text_size = editTextNumber1.getText().toString().length();
if (s.toString().substring(0,1).equals("-")){
number1 = Float.parseFloat(editTextNumber1.getText().toString().substring(1,text_size-1));
}else{
number1 = Float.parseFloat(editTextNumber1.getText().toString());
}
float number2 = (float) (number1 * 1.66));
float number3 = (float) (number1 + 23.175);
editTextNumber2.setText(String.format(Locale.getDefault(), "%.3f", number2));
editTextNumber3.setText(String.format(Locale.getDefault(), "%.3f", number3));
}
}
...
}
Upvotes: 1
Reputation: 421
I found the solution that works for me:
@Override
public void afterTextChanged(Editable s) {
if (editTextNumber1.hasFocus()) {
if (s.length() != 0) {
String first = editTextNumber1.getText().toString();
if (first.equals("-")) {
//do nothing, or whatever
}
else {
number1 = Float.parseFloat(editTextNumber1.getText().toString());
number2 = (float) (number1 * 1.66);
number3 = (float) (number1 + 23.175);
editTextNumber2.setText(String.format(Locale.getDefault(), "%.3f", number2));
editTextNumber3.setText(String.format(Locale.getDefault(), "%.3f", number3));
}
Basically, as long as it passes the first character in the string there's no more problems with the "-" sign. Works for "." with decimals as well.
Upvotes: 0