最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【记录】把Android中的EditText的值变成如有改动就调用相关处理代码(validate校验输入是否合法)

Android crifan 3496浏览 0评论

【背景】

折腾:

【未解决】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校验输入是否合法)

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
83 queries in 0.221 seconds, using 22.13MB memory