我从条形码扫描到编辑文本的数据。在那个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 or TextWatcher (barcode scanning)上提出的一个similer问题 请指导我在哪里做错了。任何帮助表示赞赏。
答案 0 :(得分:0)
你的问题是它会对你单独输入的每个字符进行计数,所以如果你输入一个数字输入它就能正常工作,否则就会输入每个字符。我有同样的问题,仍然没有解决它