web-dev-qa-db-fra.com

Comment appliquer l'événement Textchange sur EditText

J'ai développé une application simple, comme la soustraction, l'addition . Dans cette application, j'utilise trois EditTexts, un pour la réponse et deux autres pour la question . Je veux calculer la réponse d'une question à un événement de changement de texte. Mais lorsque j'applique l'événement de modification de texte à la fois, l'événement se produit mais ne fonctionne pas correctement. Parce que quand j'entre dans le texte en premier EditText de la question l'événement se produit mais il lève cette exception:

07-03 16:39:48.844: E/EduApp Log :=>(12537): Error In Text change Event Java.lang.NumberFormatException: unable to parse '' as integer

Que dois-je faire? J'utilise la TextWatcher pour l'événement de changement de texte.

txtOne.addTextChangedListener(this);
txtTwo.addTextChangedListener(this);

public void afterTextChanged(Editable s) {}

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

public void onTextChanged(CharSequence s, int start, int before, int count) {}  
24
Zala Janaksinh

Je pense que vous recevez String " " vide qui est à l'origine de ce problème. Assurez-vous d’obtenir une chaîne non vide de votre EditText

Considérez que votre EditText n’a aucune valeur saisie, et que vous essayez d’obtenir sa valeur et de la convertir en int, vous allez rencontrer ce type de problème. 

edittext.addTextChangedListener(new TextWatcher() {

    public void onTextChanged(CharSequence s, int start, int before,
            int count) {
            if(!s.equals("") ) { 
                //do your work here 
            }
    }



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

    }

    public void afterTextChanged(Editable s) {

    }
});

Consultez également ce lien pour plus d’idées, 

https://stackoverflow.com/a/3377648/603744

40
Andro Selva

je pense que le meilleur dans le cas où le type edittext est number ... utilisez la fonction (length) du paramètre. au lieu de (fonction equle ()) ex:

edittext.addTextChangedListener(new TextWatcher() {

    public void onTextChanged(CharSequence s, int start, int before,
            int count) {
        if (s.length() > 0)
                { //do your work here }
        }

    }

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

    }

    public void afterTextChanged(Editable s) {

    }
});
2
user6757534

Je l'ai utilisé et c'est correct:

public void afterTextChanged(Editable arg0) {
    String inputs = input.getText().toString();
    Integer index=0;
    if(!inputs.equals("")) 
        index=Integer.valueOf(inputs);

}
1
Omid

Je pense que vous devez vérifier que votre valeur editText est vide ou pas la première. Quelque chose comme ça:

String textValue;
textValue = edittext().getText().toString());
Log.v("","Value is " + textValue);
if(textValue != ""){
   // Call Text Change Listener Here
}else{
   // Throw error message or something
}

J'espère que c'est de l'aide.

0
myo htet aung

J'ai eu le même problème et le problème a été résolu avec ces 2 actions:
1 - Android: inputType = "textNoSuggestions" (cela n'a pas résolu le problème lui-même)
2 - ajout de l'auditeur: 

edittext1.addTextChangedListener(new TextWatcher() {

            public void onTextChanged(CharSequence s, int start, int before,
            int count) {

                Log.e("JFT", "EDITTEXT => = "+s);
                if(!s.equals("") ) {
                    //do your work here
                }
            }



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

            }

            public void afterTextChanged(Editable s) {

            }
        });
0
AndroidHV

Ajouté Kotlin implementation pour référence future

 webUrl.editText!!.addTextChangedListener(object : TextWatcher {
            override fun afterTextChanged(s: Editable?) {
            }

            override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
            }

            override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {

                var urlToload: String
                if (s ==null || s.isEmpty()) {
                    urlToload = UniversalWebViewFragment.YOUTUBE_SERACH_URL + "hd trailers"
                } else {
                    urlToload = UniversalWebViewFragment.GOOGLE_SERACH_URL + s.toString()
                }

                loadURL(urlToload)
            }

        })
0
Hitesh Sahu