Android EditText с номером типа ввода делает значение при изменении текста всегда> 0

В настоящее время я делаю проверку, где у меня есть текст редактирования с номером типа ввода, используемый для отображения количества товаров, купленных в корзине пользователя. Я хочу убедиться, что при редактировании значения edittext, если значение равно "", "0" или "00" и т. Д., Пока оно < 1, значение будет установлено в "1".

Я устал код ниже:

        txtJumlah.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                int jumlah = Integer.parseInt(txtJumlah.getText().toString());
                if(txtJumlah.getText().toString().equals("") || jumlah <= 1) {
                    txtJumlah.setText("1");
                }
                calculate();
            }
        });

Но он возвращает java.lang.StackruError: размер стека 8 МБ

Может кто-нибудь мне помочь? Спасибо

2 ответа

Решение

Замени это

if(txtJumlah.getText().toString().equals("") || jumlah <= 1) {
     txtJumlah.setText("1");
}

от:

if(txtJumlah.getText().toString().equals("") || jumlah < 1) {
    txtJumlah.setText("1");
}

Выше решение должно решить проблему.

Одно из предложений по оптимизации вашего кода:

int jumlah = Integer.parseInt(txtJumlah.getText().toString());

Это может привести к ParseException (если txtJumlah.getText().toString() это строка, а не числа)

Когда вы устанавливаете текст в "1", он снова и снова будет вызывать afterTextChanged, вызывая бесконечный цикл. Попробуйте вместо этого указать в своем выражении if значение jumlah < 1.

Другие вопросы по тегам