Java-防止两次在android的textwatcher中运行
作者:互联网
即时通讯与android的TextWatcher一起执行此操作:用户输入时,保存键入的内容,保存后,在Edittext中更改字符.例如,我有一个常量文本,例如“ hi im happy”,并且我在edittext用户中键入的所有内容都看到该文本正在编写(该字符串在用户键入时显示Tandemly)!但用户键入的主要文本存储在变量中.我在afterTextChanged内部使用此代码:
if(s.toString().charAt(s.length()-1) != 'a'){
//save inside freaktext variable(append)
freaktext=freaktext+s.toString().charAt(s.length()-1);
//change edittext value(what user see's)
txtfreak.setText(s.toString().substring(0, s.length()-1) + "a");
txtfreak.setSelection(txtfreak.getText().length());
}else{
freaktext=freaktext+"a";
}
我在这段代码中说,如果键入的字符不是“ a”,则将其保存在名为“ freaktext”的变量中,然后更改edittext值,并将“ a”字符放在edittext中字符串的末尾.但是如果用户键入“ a”,则将其保存为freaktext.
但我的问题是:当用户键入一个无“ a”字符时,一切正常,我的代码保存键入的字符,然后修改edittext值,但是当edittext值更改时,整个代码将再次运行,因为上次我更改了该代码并放置了“到它的“ a”,我的代码的第二部分(其他)运行,然后再次将“ a”保存到保存的字符串的末尾.实际上,当我输入“ q”时,我在保存的字符串中看到了“ qa”!我希望只是用户直接在键盘上键入“ a”,保存“ a”,而在其他情况下则不这样.我实际上我的else部分仅在用户直接按键盘上的“ a”键时运行.我该怎么做?请帮助我,这段代码浪费了我1天的时间
解决方法:
功能之外,某处:
boolean weChangedIt = false;
内部afterTextChanged:
if (weChangedIt) {
weChangedIt = false;
} else {
if(s.toString().charAt(s.length()-1) != 'a'){
weChangedIt = true;
freaktext=freaktext+s.toString().charAt(s.length()-1);
txtfreak.setText(s.toString().substring(0, s.length()-1) + "a");
txtfreak.setSelection(txtfreak.getText().length());
}else{
freaktext=freaktext+"a";
}
}
标签:textwatcher,java,android 来源: https://codeday.me/bug/20191031/1972973.html