Pergunta

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;
        }
});
Foi útil?

Solução

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) {

        }
    });

Outras dicas

You need to implement your own EditText and override the method onKeyPreIme():

@Override
    public boolean onKeyPreIme(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
                        // Do whatever you want to here.
            return true;
        }
        return false;
    }

You need to modify your code something like this:

EditText priceField = (EditText)findViewById(R.id.routeInit_price);

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    // TODO Auto-generated method stub
    if ((keyCode == KeyEvent.KEYCODE_BACK)) {
            if(priceField.getText().toString().length() > 0)
                return super.onKeyDown(keyCode, event);
            else
                return true;
        }
        return false;
    }
});
          <EditText
                  android:layout_width="fill_parent"
                  android:layout_height="wrap_content"
                  android:digits="0123456789"
                  android:scrollHorizontally="true"
                  android:singleLine="true"
                  android:textSize="14sp" />
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top