在自己写个数字加减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 + ""); } });
这样就不会卡死了。但是不知道原理是什么。希望知道的人留言告诉我下。这个解决办法,还可移除监听,之后再添加