使用TextWatcher的EditText显示有线行为并在递归循环中移动

时间:2013-12-10 07:01:35

标签: java android android-edittext barcode-scanner textwatcher

我从条形码扫描到编辑文本的数据。在那个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问题 请指导我在哪里做错了。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

你的问题是它会对你单独输入的每个字符进行计数,所以如果你输入一个数字输入它就能正常工作,否则就会输入每个字符。我有同样的问题,仍然没有解决它