Я использую сканер штрих-кода, который вставляет строку штрих-кода в EditText в этом формате «12345 \ n». Вместо того, чтобы использовать кнопку поиска, я хочу вызвать событие поиска с помощью символа "\ n". Я использовал addTextChangedListener TextEdit и внутри той функции, которую я делаю:
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);
}
}
};
Впервые он работает довольно хорошо, но я также хочу очищать EditText после каждого сканирования. Но это невозможно сделать внутри события afterTextChanged, потому что оно входит в рекурсивный цикл или что-то в этом роде.
Вот другое решение, которое работает довольно хорошо:
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;
}
});
На самом деле я не уверен, как правильно это сделать. Может быть, я могу использовать событие OnTeyListener EditText. Есть предложения?
Спасибо