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 + "");
    }
});

這樣就不會卡死了。但是不知道原理是什麼。希望知道的人留言告訴我下。這個解決辦法,還可移除監聽,之後再添加

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