0

テキストから空白を削除するには、次のコードを記述しました。同じEditTextからテキストをコピーして貼り付けるときに、テキストの間にある空白を削除する必要がありました(「text」と入力して、同じEditTextにテキストをコピーして貼り付けます。テキストは次のようになります。 「テキストテキスト」ですが、実際には「テキストテキスト」のようになっています)。しかし、問題は、textChangedListenerをEdittextに追加するとクラッシュすることです

 textForm.addTextChangedListener(new TextWatcher() {

     @Override
     public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
        // TODO Auto-generated method stub

         String str = textForm.getText().toString().replace(" ", ""); 
         textForm.setText(str);
     }

     @Override
     public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
        int arg3) {
        // TODO Auto-generated method stub

     }

     @Override
     public void afterTextChanged(Editable arg0) {
        // TODO Auto-generated method stub

    }
 });

logcatエラーを以下に示します

04-24 14:55:12.660: E/AndroidRuntime(20780): java.lang.StackOverflowError
04-24 14:55:12.660: E/AndroidRuntime(20780):    at android.text.TextUtils.getChars(TextUtils.java:60)
4

2 に答える 2

2

これは、onTextChanged内でsetText()を実行しているためです。したがって、テキストを変更すると、onTextChangedが呼び出され、onTextChanged内でsetText()が呼び出されます。そのため、テキストが再度変更され、onTextChanged()が再度呼び出され、スタックオーバーフローが発生してstackOverFlowエラーが発生するまでこのプロセスが続行されます。あなたが理解することを願って...

setText()の前にユーザーremoveTextChangedListener()。

完全な解決策については、この投稿を確認してください: https ://stackoverflow.com/a/8600921/912851

于 2012-04-24T09:33:22.027 に答える
1

あなたはなんとか無限ループを作成することができました:)

テキストを変更すると、onTextChangedリスナーが呼び出され、テキストが変更されます。これにより、onTextChangedリスナーが呼び出され、テキストが変更されます。

これを試して

@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {

     if (textForm.getText().toString().contains(" ")){
         String str = textForm.getText().toString().replace(" ", ""); 
         textForm.setText(str);
     }
}

またはこれ

@Override
public void afterTextChanged(Editable s) {
    String replacedText = s.toString().replaceAll(" ", "");
    if (!replacedText.equals(s.toString())) {
         textForm.setText(replacedText);   
    }
}

これを行うにはおそらくもっとエレガントな方法があり、テキストビューテキストを2回取得することは小さな非効率ですが、あなたはその考えを理解します。

于 2012-04-24T09:36:51.057 に答える