J'utilise un lecteur de code-barres qui insère une chaîne de codes-barres dans un EditText au format "12345 \ n". Au lieu d'utiliser un bouton de recherche, je veux déclencher l'événement de recherche par le caractère "\ n". Je addTextChangedListener de TextEdit et à l'intérieur de cette fonction que je fais:EditText, OnKeyListener ou TextWatcher (lecture de codes-barres)
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 très bien pour la première fois, mais je veux aussi effacer le EditText après chaque balayage. Mais il n'est pas possible de faire cela à l'intérieur de l'événement afterTextChanged, car il se passe dans une boucle récursive ou quelque chose comme ça.
est ici l'autre solution, qui fonctionne très 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 quelle est la bonne façon de le faire il. Peut-être que je peux utiliser l'événement OnKeyListener d'EditText. Aucune suggestion?
Merci
où avez-vous effacer le texte? avec votre première solution qui se termine par une boucle sans fin? essayez de l'effacer dans le si cela vérifie le dernier caractère. Si vous le faites, il devrait fonctionner, je suppose. (raison: linebreak ne sera là que la première fois qu'il est appelé et ne sera pas là quand il sera appelé à nouveau à cause de l'effacement) –
Comment se fait-il que vous utilisiez @Override pour onKey(). N'est-ce pas une méthode abstraite? Donc, il ne devrait pas exiger un @ Override..right? – faizal