new_project
new_project

Reputation: 421

TextWatcher - parsing negative value in editText in Android Studio

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

Answers (2)

SoufianeKre
SoufianeKre

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

new_project
new_project

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

Related Questions