编程语言
首页 > 编程语言> > Java-防止两次在android的textwatcher中运行

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