Android:addTextChangedListener卡死

在自己写个数字加减View的时候,中间是一个EditTextView,要判断它是否是int,然后以及最大最小,我是这样写的:

etNum.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {}
    @Override
    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {}
    @Override
    public void afterTextChanged(Editable editable) {
        try {
            num = Integer.parseInt(etNum.getText().toString());
            if (num > 999) {
                num = 999;
            }
            if (num < 1) {
                num = 1;
            }
        } catch (Exception e) {
            num = 1;
            Toast.makeText(getContext(), "请输入数字", Toast.LENGTH_SHORT).show();
        }
        etNum.setText(num + "");
    }
});

然后只要文字一改变就卡死,调试发现,貌似setText后就又触发了监听器,然后我换一种写法:

etNum.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

    }

    @Override
    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

    }

    @Override
    public void afterTextChanged(Editable editable) {
        try {
            num = Integer.parseInt(etNum.getText().toString());
            if (num > 999) {
                num = 999;
                etNum.setText(num + "");
            }
            if (num < 1) {
                num = 1;
                etNum.setText(num + "");
            }
        } catch (Exception e) {
            num = 1;
            etNum.setText(num + "");

            Toast.makeText(getContext(), "请输入数字", Toast.LENGTH_SHORT).show();
        }
        //etNum.setText(num + "");
    }
});

这样就不会卡死了。但是不知道原理是什么。希望知道的人留言告诉我下。这个解决办法,还可移除监听,之后再添加

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章