Arhn - архитектура программирования

EditText с 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 или TextWatcher (сканирование штрих-кода ) Пожалуйста, подскажите, где я делаю неправильно. Любая помощь приветствуется.


  • проверьте это 10.12.2013
  • @CapDroid, почему он переходит в рекурсивный цикл? 10.12.2013
  • Проблема в том, что строка if (s.length() › 0) всегда будет true . Вы должны изменить свой алгоритм, что бы вы ни хотели делать. 10.12.2013

Ответы:


1

Ваша проблема в том, что он подсчитывает каждый символ, который вы вводите отдельно, поэтому, если вы вводите однозначный ввод, он работает хорошо, в противном случае он принимает каждый символ ввода. у меня такая же проблема и до сих пор не решил

31.10.2014
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..