Textwatcher - 不同的最后字符情况

时间:2014-06-18 07:05:37

标签: android textwatcher

长话短说我遇到了这个问题:我正在将textwatcher附加到edittext上。一旦" 1"是写在它上面的最后一个字母,应该用字母" a"代替。但问题出在这里:我很快就会喜欢" a"也是编辑文本上写的最后一个字符(用户按下" a"),除了先前的方法,还有一些事要做。但是当我测试它并键入" 1"时,它转换为" a"通常,我提到的事情也已完成。我似乎无法找到一种方法来绕过这个,可以给出任何建议吗?非常感谢。我用:

public void afterTextChanged(Editable s) {
    //TODO Auto-generated method stub
    if (s.length() > 0 && s.toString().charAt(s.length() - 1) == '1') {
        current_string = s.toString().substring(0, (s.length() - 1));
        et.setText(current_string + "a");
        length = s.length();
        et.setSelection(length);
    }
    else if (s.length() > 0 && s.toString().charAt(s.length() - 1) == 'a') {
        //do some things
    }

2 个答案:

答案 0 :(得分:1)

试试这个

public void afterTextChanged(Editable s) {

if (s.length() > 0 && s.toString().charAt(s.length() - 1) == 'a') {
       //do some things
}
if (s.length() > 0 && s.toString().charAt(s.length() - 1) == '1') {
    current_string = s.toString().substring(0, (s.length() - 1));
    et.setText(current_string + "a");
    length = s.length();
     et.setSelection(length);

}

答案 1 :(得分:0)

你的意思是。

1)当用户输入1时,它应替换为'a'。 2)当用户单独输入'a'时(不是由步骤1转换),它应该做其他事情

amount1.addTextChangedListener(new TextWatcher() {

            int flagg;

            public void onTextChanged(CharSequence s, int start, int before,
                    int count) {

                System.out.println("flagg"+s+"#"+flagg );
                if (s.length() > 0  && s.toString().charAt(s.length() - 1) == '1' )
                {   System.out.println("Converting and doing NOthing");
                    flagg=1;
                    String current_string = s.toString().substring(0,(s.length() - 1));
                    amount1.setText(current_string + "a");
                    int length = s.length();
                    amount1.setSelection(length);

                } 
                else if (s.length() > 0     && ( s.toString().charAt(s.length() - 1) == 'a') && flagg == 0 )  {
                    System.out.println("Staying same and doing Something");

                    amount2.setText(amount2.getText().toString() + "Z");
                    // do some things
                }

            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {

                if (start != 0) {

                    if ((s.toString()).substring(s.length() - 1).equals("a")) {
                        flagg = 1;
                    }
                    if ((s.toString()).substring(s.length() - 1).equals("1")) {
                        flagg = 0;
                    } else {
                        flagg = 0;
                    }

                }

            }

            @Override
            public void afterTextChanged(Editable arg0) {

            }
        });

//new flagg is set in if condition