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

时间:2017-08-25 02:53:05

标签: android android-edittext textwatcher

我正在进行验证,其中我有一个带输入类型编号的edittext,用于显示在用户购物车中购买的商品数量。我想确保编辑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.StackOverflowError:堆栈大小为8MB

任何人都可以帮助我吗?感谢

2 个答案:

答案 0 :(得分:2)

当您将文本设置为“1”时,它将再次调用afterTextChanged并再次导致无限循环。尝试把jumlah&lt;而在if语句中则为1。

答案 1 :(得分:1)

替换这个:

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