Android 输入类型编号的 EditText 使文本更改时的值始终 > 0

Android EditText with input type number make value on text change always > 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();
            }
        });

但是它returns一个java.lang.WhosebugError: stack size 8MB

谁能帮帮我?谢谢

当您将文本设置为“1”时,它会一次又一次地调用 afterTextChanged,从而导致无限循环。尝试将 jumlah < 1 放入您的 if 语句中。

替换为:

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() 是字符串而不是数字)