Home > Back-end >  Handling change after a number has already been entered into EditText using addTextChangedListener
Handling change after a number has already been entered into EditText using addTextChangedListener

Time:11-28

My app works fine when I first enter a number into the EditText field and does what it is supposed to.

But the number stays in edit text so if I want to change it again I have to clear the previous number. When doing so I get an error java.lang.NumberFormatException: For input string: "".

I understand the reason is because the text has changed so afterTextChanged(p0: Editable?) is called and it is an empty string.

How can I prevent this from crashing the app and allow the user to clear and change the number?

        val textChange : EditText = findViewById(R.id.bombCount)
        textChange.addTextChangedListener(object  : TextWatcher{
        var a : Int = 0
        override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
        }

        override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {}

        override fun afterTextChanged(p0: Editable?) {
            a = p0.toString().toInt()
            GameControl.reset(a,arrCell,marked)
            arr = GameControl.startGame(a)
        }

    })


    <EditText
        android:id="@ id/bombCount"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:hint="Bomb Count"
        android:inputType="number"
        />

CodePudding user response:

Add a isNotblank

override fun afterTextChanged(p0: Editable?) {
       if(p0.toString().isNotBlank()){
            a = p0.toString().toInt()
            GameControl.reset(a,arrCell,marked)
            arr = GameControl.startGame(a)
       }
    }

or

/* when string is blank you will return a Int*/
a = Int.takeIf{p0.toString().isBlank()}?:p0.toString().toInt()
  • Related