3

これを行うために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」と入力すると、フリークテキストに保存されます。

私の問題は次のとおりです。ユーザーが「a」以外の文字を入力すると、すべてが正常に機能し、コードは入力された文字を保存してから edittext 値を変更しますが、edittext 値が変更されるとコード全体が再度実行され、最後に変更して「 a" を追加すると、コードの 2 番目の部分 (else) が実行され、保存された文字列の末尾に "a" が再度保存されます。実際、「q」と入力すると、保存した文字列に「qa」が表示されます!! ユーザーがキーボードで「a」を直接入力し、「a」が保存され、他の状況では保存されないようにしたい。私のelseセクションは、ユーザーがキーボードの「a」キーを直接押したときにのみ実行されます.どうすればこれを行うことができますか? 助けてください、このコードは私の時間を1日無駄にします

4

2 に答える 2

3

あなたの機能の外、どこか:

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";
    }
}
于 2013-03-28T06:10:12.947 に答える
1
txtfreak.removeTextChangedListener(whateveryourlistenername);
if(s.toString().charAt(s.length()-1) != 'a'){
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";
}
txtfreak.addTextChangedListener(whateveryourlistenername);
于 2013-03-28T06:15:10.760 に答える