Я получаю данные от сканирования штрих-кода в текст редактирования. К этому Edittext я применил addTextChangedListener с классом Textwatcher. Но он показывает проводное поведение. Он работает нормально в первый раз, но в следующий раз он переходит в рекурсивный цикл. Один элемент, который я сканировал, добавлялся три раза из-за рекурсивного поведения этого Edittext. Ниже приведен код, который я использую.
EditText barcodeScanner =(EditText)findViewById(R.id.barcodeFocus);
TextWatcher textwatcher = 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) {
Log.d("@@@@", s.toString());
if (s.length() > 1) {
// TODO Auto-generated method stub
if(flag){
char lastCharacter = s.charAt(s.length() - 1);
if (lastCharacter == 'p') {
String barcode = s.subSequence(0, s.length() - 1).toString();
Log.d("Id before parsing", barcode);
int btnId = Integer.parseInt(barcode.trim());
getItemsInformation(btnId);
}
flag = false;
}
else
flag = true;
}
}
};
barcodeScanner.addTextChangedListener(textwatcher);
private void getItemsInformation(int btnId) {
ProductOptionsDbHandler productOptionDbHandler = new ProductOptionsDbHandler(this);
List<String> optionNames = productOptionDbHandler.getProductOptions(btnId);
Product productdetails = prodDbHand.getSelecteProductsDetails(btnId);
float price = productdetails.getProductPrice();
if(optionNames.size()>0 || price == 0){
Intent intent = new Intent(this,ItemPopUpTabActivity.class);
intent.putExtra("intVariableName", btnId);
intent.putExtra("itemPrice", price);
intent.putExtra("itemTax", productdetails.getTaxRate());
startActivity(intent);
barcodeScanner.removeTextChangedListener(textwatcher);
barcodeScanner.setText("");
barcodeScanner.addTextChangedListener(textwatcher);
}
else{
listofItemList.add(productdetails);
QtyOfItems.add(1);
ItemsPrice.add(price);
ItemsIds.add(productdetails.getProductId());
itemTaxRate.add(productdetails.getTaxRate());
addItemintocheckoutList(price,productdetails);
List<String> itemsOptions = new ArrayList<String>();
itemsOptionsIds.add(itemsOptions);
Variables.itemposition++;
barcodeScanner.removeTextChangedListener(textwatcher);
barcodeScanner.setText("");
barcodeScanner.addTextChangedListener(textwatcher);
}
}
Ввод для штрих-кода похож на 002p. я пробовал с
barcodeScanner.removeTextChangedListener(textwatcher);
barcodeScanner.setText("");
barcodeScanner.addTextChangedListener(textwatcher);
после выполнения работы в конце концов, но ничего не изменилось. Я уже пробовал одну аналогичную проблему, поднятую кем-то на SO EditText, OnKeyListener или TextWatcher (сканирование штрих-кода ) Пожалуйста, подскажите, где я делаю неправильно. Любая помощь приветствуется.