2017-01-12 5 views
0

は、私は、ユーザーの種類、電子メール、彼らは押した瞬間には、@、それ自動[email protected]などとしてそれらの残りの部分を埋めるが、問題はそのがクラッシュというときに欲しいafterTextChangeを使用してテキストを取得し、それにテキストを追加する方法は?

@Override 
     public void afterTextChanged(Editable s) { 
      if(email.getText().toString().contains("@")){ 
       String e = email.getText().toString(); 
       email.setText(e+"coretec.co.ke"); 


      } 

     } 

エラーlogcat:

java.lang.StackOverflowError 
    at java.lang.System.arraycopy(System.java:216) 
    at android.text.SpannableStringBuilder.getChars(SpannableStringBuilder.java:926) 
    at android.text.TextUtils.getChars(TextUtils.java:81) 
    at android.text.method.ReplacementTransformationMethod$ReplacementCharSequence.getChars(ReplacementTransformationMethod.java:151) 
    at android.text.TextUtils.getChars(TextUtils.java:81) 
    at android.text.TextUtils.indexOf(TextUtils.java:114) 
    at android.text.StaticLayout.generate(StaticLayout.java:191) 
    at android.text.DynamicLayout.reflow(DynamicLayout.java:288) 
    at android.text.DynamicLayout.<init>(DynamicLayout.java:174) 
    at android.widget.TextView.makeSingleLayout(TextView.java:6209) 
    at android.widget.TextView.makeNewLayout(TextView.java:6107) 
    at android.widget.TextView.checkForRelayout(TextView.java:6820) 
    at android.widget.TextView.setText(TextView.java:3850) 
    at android.widget.TextView.setText(TextView.java:3708) 
    at android.widget.EditText.setText(EditText.java:81) 
    at android.widget.TextView.setText(TextView.java:3683) 
    at com.coretec.coretec.activity.Login$1.afterTextChanged(Login.java:79) 
+0

エラーログをポストしてください。 – fluffyBatman

+0

これは無限回帰 –

+0

です。あなたは 'TextWatcher#afterTextChanged'のドキュメントを読んでいますか? – pskink

答えて

0

afterTextChangedのドキュメント状態、

この方法は、どこかの内、テキスト はBを持っている、ことを通知するために呼び出されます変更されました。あなたが行った変更は、この方法は

一つの方法を再帰的に再 と呼ばれることになりますので、 からこのコールバックをSにさらに変更を行うことが正当であるが、無限 ループに自分自身を取得しないように注意してくださいTextWatcherからEditTextを更新するには、最初にEditTextからウォッチャーを登録解除し、新しい値をEditTextに設定し、最後にウォッチャーをEditTextに再度登録して、それ以上の変更を処理します。

Hereがその良い例です。

-1

は、それが無限ループになります他のテキストを追加する前にこの

String text = email.getText().toString(); 
if(text.contains("@") && !text.contains("@coretec.co.ke")){ 
    String e = email.getText().toString(); 
    email.setText(e+"coretec.co.ke"); 
} 
0

はテキスト変更リスナーを削除してください。

@Override 
     public void afterTextChanged(Editable s) { 
      if(email.getText().toString().contains("@")){ 
       email.removeTextChangedListener(this); // this line 
       String e = email.getText().toString(); 
       email.setText(e+"coretec.co.ke"); 


      } 

    } 
関連する問題