Search code examples
androideventsandroid-edittextbackspace

Android: Numeric key register backspace pressed


I have an EditText which only accepts numeric numbers defined like this:

<EditText android:id="@+id/routeInit_price" 
    android:layout_height="wrap_content"
    android:layout_width="120dp"
    android:layout_gravity="center_horizontal"
    android:lines="1"
    android:inputType="numberDecimal"/>

I am validating if there is a valid input like below to enable/disable a button. However, I doesn't receive an event on the backspace/delete button pressed event. How can I fix that? Because when the EditText is empty the button should be diabled.

EditText priceField = (EditText)findViewById(R.id.routeInit_price);
priceField.setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View view, int keyCode, KeyEvent keyEvent) {
            if(keyEvent.getAction() == KeyEvent.ACTION_UP)
            {
                if(((EditText)view).getText().toString().length() > 0)
                    ready.setEnabled(true);

                else
                    ready.setEnabled(false);
            }

            return false;
        }
});

Solution

  • Try this

    priceField.addTextChangedListener(new TextWatcher() {
    
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
    
                if(priceField.getText().toString().length() > 0)
                    ready.setEnabled(true);
    
                else
                    ready.setEnabled(false);
            }
    
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    
            }
    
            @Override
            public void afterTextChanged(Editable s) {
    
            }
        });