【背景】
折腾:
【未解决】android中点击其他的(如Button等)但是EditText却没有失去焦点
期间,需要去把当前程序中的代码改为如下的逻辑:
把EditText中的值,如果有任何改动,就都调用我此处程序中的validate,然后同时获得反馈,并更新对应的UI(即variable的status)
【折腾过程】
1.结果已经加好了代码了:
TextWatcher mVarValueTextWatcher; mVarValueTextWatcher = 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 arg0) { validateVarValue(curEditVarEdittext); } }; variableValueView.addTextChangedListener(mVarValueTextWatcher);
但是现象是:
对于afterTextChanged,会被一直调用到
->搞得界面卡死了,无法正常通过键盘去修改值了。。。
2.参考了:
EditText 监听 Text 的 改动 – Android – mobile – ITeye论坛
去改为:
mVarValueTextWatcher = 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) { validateVarValue(curEditVarEdittext); } @Override public void afterTextChanged(Editable arg0) { } };
然后结果是:
onTextChanged一直会被调用。。。
同样卡死,同样是界面死掉,无法通过键盘输入了。
3.后来才注意到,卡死的原因是:
我此处,对于onTextChanged或afterTextChanged调用的validateVarValue,会触发校验当前的值
然后会导致后续校验完毕后去调用
variableValueView.setText(varValueStr);
由此导致递归循环调用onTextChanged或afterTextChanged
从而导致死循环了。。。
【总结】
此处,虽然是可以实现,对于EditText来说,监听值变化,从而进行一定处理,比如调用此处代码去校验新的值是否有效。
但是由于此处程序的逻辑有些特殊,会导致死循环,所以暂时放弃此办法。
继续回去:
【未解决】android中点击其他的(如Button等)但是EditText却没有失去焦点
去用另外那种方式:
当EditText点击到别的Button或Menu时,让其失去焦点
从而使得变量值可以得到校验是否有效。
转载请注明:在路上 » 【记录】把Android中的EditText的值变成如有改动就调用相关处理代码(validate校验输入是否合法)