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
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
Vous devez vous connecter pour publier un commentaire.
Si vous désactivez la
EditText
contenu dans leafterTextChanged()
, vous ne devriez pas avoir une boucle infinie.OriginalL'auteur Hrk
Code de @Hrk ne fonctionne pas pour moi, parce que la méthode
myEditText.setString()
n'existe pas.En voici une:
OriginalL'auteur