web-dev-qa-db-fra.com

Comment utiliser l'événement EditText onTextChanged lorsque j'appuie sur le numéro?

J'ai un EditText avec "text = 0.00". Lorsque j'appuie sur le chiffre 3, il devrait ressembler à 0.03 et la deuxième fois sur le chiffre 5, le texte devrait être 0.35. Et 35.0, 35.09 comme ceci. La EditText a initialement la valeur 0.00.

Celles-ci sont toutes effectuées avec la même EditText.

Comment est-ce que je réalise ceci? J'ai essayé d'utiliser addTextChangedListener() avec TextWatcher().

41
Ria

Vous avez sélectionné la bonne approche. Vous devez étendre la classe avec TextWatcher et remplacer afterTextChanged(), beforeTextChanged(), onTextChanged().

Vous devez écrire votre logique souhaitée dans la méthode afterTextChanged() pour obtenir les fonctionnalités dont vous avez besoin.

36
Roll no1

Vous pouvez aussi essayer ceci:

EditText searchTo = (EditText)findViewById(R.id.medittext);
searchTo.addTextChangedListener(new TextWatcher() {
    @Override
    public void afterTextChanged(Editable s) {
        // TODO Auto-generated method stub
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        // TODO Auto-generated method stub
    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        doSomething();
    } 
});
85
Khawar Raza

Ici, j’ai écrit quelque chose de similaire à ce dont tu as besoin:

    inputBoxNumberEt.setText(".     ");
    inputBoxNumberEt.setSelection(inputBoxNumberEt.getText().length());
    inputBoxNumberEt.addTextChangedListener(new TextWatcher() {

        boolean ignoreChange = false;

        @Override
        public void afterTextChanged(Editable s) {
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start,
                                      int count, int after) {
        }

        @Override
        public void onTextChanged(CharSequence s, int start,
                                  int before, int count) {
            if (!ignoreChange) {
                String string = s.toString();
                string = string.replace(".", "");
                string = string.replace(" ", "");
                if (string.length() == 0)
                    string = ".     ";
                else if (string.length() == 1)
                    string = ".  " + string;
                else if (string.length() == 2)
                    string = "." + string;
                else if (string.length() > 2)
                    string = string.substring(0, string.length() - 2) + "." + string.substring(string.length() - 2, string.length());
                ignoreChange = true;
                inputBoxNumberEt.setText(string);
                inputBoxNumberEt.setSelection(inputBoxNumberEt.getText().length());
                ignoreChange = false;
            }
        }
    });
8
M. Usman Khan

mettre la logique 

afterTextChanged(Editable s) {
    string str = s.toString()
    // use the string str
}

documentation sur TextWatcher

1
Dan Alboteanu