在自己寫個數字加減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 + ""); } });
這樣就不會卡死了。但是不知道原理是什麼。希望知道的人留言告訴我下。這個解決辦法,還可移除監聽,之後再添加