我正在使用 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”,我的代码的第二部分(else)运行并再次将“a”保存到已保存字符串的末尾。事实上,当我输入“q”时,我在保存的字符串中看到了“qa”!!我希望用户直接在键盘上输入“a”,保存“a”,而在其他情况下则不需要。事实上,我的 else 部分仅在用户直接按下键盘上的“a”键时运行。我该怎么做?请帮助我,这段代码浪费了我 1 天的时间