140 votes

Écouteur Android edittext onchange

Je connais un peu TextWatcher mais qui se déclenche sur chaque caractère que vous saisissez. Je veux un écouteur qui se déclenche à chaque fois que l'utilisateur termine l'édition. Est-ce possible ? Également dans TextWatcher J'obtiens une instance de Editable mais j'ai besoin d'une instance de EditText . Comment je fais ça ?

EDIT La deuxième question est plus importante. Veuillez y répondre.

2 votes

Essayez d'ajouter le focus listener, quand le editText prend le focus, cela signifie que l'utilisateur a commencé à le modifier, et quand le editText perd le focus, cela signifie que la modification est terminée

0 votes

256voto

Cata Points 4636

Tout d'abord, vous pouvez voir si l'utilisateur a fini de modifier le texte si le bouton EditText perd le focus ou si l'utilisateur appuie sur le bouton "done" (cela dépend de votre implémentation et de ce qui vous convient le mieux). Deuxièmement, vous ne pouvez pas obtenir un EditText au sein de la TextWatcher seulement si vous avez déclaré le EditText comme un objet d'instance. Même si vous ne devez pas modifier le EditText au sein de la TextWatcher parce que ce n'est pas sûr.

EDIT :

Pour pouvoir obtenir le EditText dans votre TextWatcher la mise en œuvre, vous devriez essayer quelque chose comme ça :

public class YourClass extends Activity {

    private EditText yourEditText;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);
        yourEditText = (EditText) findViewById(R.id.yourEditTextId);

        yourEditText.addTextChangedListener(new TextWatcher() {

            public void afterTextChanged(Editable s) {

                // you can call or do what you want with your EditText here

                // yourEditText... 
            }

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

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

Notez que l'exemple ci-dessus peut comporter quelques erreurs, mais je voulais simplement vous montrer un exemple.

8voto

Nepster Points 893

Je l'ai fait en utilisant AutotextView :

AutotextView textView = (AutotextView) findViewById(R.id.autotextview);
textView.addTextChangedListener(new TextWatcher() {

    @Override
    public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
        seq = cs;
    }

    @Override
    public void beforeTextChanged(CharSequence s, int arg1, int arg2, int arg3) {

    }

    @Override
    public void afterTextChanged(Editable arg0) {
        new SearchTask().execute(seq.toString().trim());
    }

});

2voto

Bush Points 593

Il existe un exemple d'utilisation du TextWatcher ici dans StackOverflow : Comment utiliser un seul TextWatcher pour plusieurs EditTexts ?

Cela vous aidera.

2voto

user2566490 Points 11

TextWatcher n'a pas fonctionné pour moi car il a continué à tirer pour chaque EditText et de foutre en l'air les valeurs des autres.

Voici ma solution :

public class ConsultantTSView extends Activity {
    .....

    //Submit is called when I push submit button.
    //I wanted to retrieve all EditText(tsHours) values in my HoursList

    public void submit(View view){

        ListView TSDateListView = (ListView) findViewById(R.id.hoursList);
        String value = ((EditText) TSDateListView.getChildAt(0).findViewById(R.id.tsHours)).getText().toString();
    }
}

Ainsi, en utilisant le getChildAt(xx) vous pouvez récupérer n'importe quel élément dans le ListView et obtenir l'élément individuel en utilisant findViewById . Et il donnera alors la valeur la plus récente.

1voto

Nuno Gonçalves Points 1175

Pour autant que je puisse y penser, il n'y a que deux façons de le faire. Comment pouvez-vous savoir que l'utilisateur a fini d'écrire un mot ? Soit en perdant le focus, soit en cliquant sur un bouton "ok". Il n'y a aucun moyen pour moi de savoir que l'utilisateur a appuyé sur le dernier caractère...

Alors appelez onFocusChange(View v, boolean hasFocus) ou ajoutez-y un bouton et un écouteur de clic.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X