EditText, OnKeyListener ou TextWatcher (numérisation de codes à barres)

Je suis à l'aide d'un scanner de code-barres qui insère un code à barres chaîne dans un EditText dans ce format "12345\n". Au lieu d'utiliser un bouton de recherche, je veux déclencher la recherche de l'événement par le "\n" caractère. J'ai utilisé TextEdit est addTextChangedListener et à l'intérieur de cette fonction, je suis en train de faire:

protected TextWatcher readBarcode = new TextWatcher() { 
 @Override
 public void onTextChanged(CharSequence s, int start, int before, int count) {
  //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 afterTextChanged(Editable s) {
  //TODO Auto-generated method stub
  char lastCharacter = s.charAt(s.length() - 1);

  if (lastCharacter == '\n') {
   String barcode = s.subSequence(0, s.length() - 1).toString();
   searchBarcode(barcode);
  }
 }
};

Il fonctionne assez bien pour la première fois, mais j'ai aussi envie de vider le EditText après chaque scan. Mais il n'est pas possible de le faire à l'intérieur de afterTextChanged événement parce qu'il va dans une boucle récursive ou quelque chose.

Ici est l'autre solution, qui est plutôt bien:

editBarcode.setOnKeyListener(new OnKeyListener() {

@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
    //TODO Auto-generated method stub
    String barcode = editBarcode.getText().toString();

    if (keyCode == KeyEvent.KEYCODE_ENTER && barcode.length() > 0) {
        editBarcode.setText("");
        searchBarcode(barcode);
        return true;
    }

    return false;
}
});

En fait, je ne suis pas sûr de ce qui est la bonne façon de le faire. Peut-être que je peux utiliser EditText de OnKeyListener événement. Des suggestions?

Grâce

où voulez-vous effacer le texte? avec votre première solution qui se termine dans une boucle sans fin? essayez de la désactiver dans le cas qui vérifie que le dernier caractère. si vous le faites dans il y il devrait fonctionner je pense. (raison: saut de ligne ne seront là la première fois qu'il est convoqué et ne sera pas là quand il sera de nouveau appelée à cause de la claire)
Comment se fait-vous à l'aide de @Override pour onKey(). N'est-il pas une méthode abstraite? Donc, il ne devrait pas exiger un @Override..droit?

OriginalL'auteur pocoa | 2010-11-11