2016-07-31 2 views
1

Как автоматически добавить текст в начале edittext, как только пользователь начнет вводить его. Например, я хочу автоматически добавить код страны, как только пользователь начнет вводить номер телефона. I tried-Добавить текст в начале edittext

 mNumber.addTextChangedListener(new TextWatcher() { 
      @Override 
      public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { 

      } 

      @Override 
      public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { 

      } 

      @Override 
      public void afterTextChanged(Editable editable) { 
      mNumber.setText("+91"+editable.getText().toString()); 
      } 
     }); 

Но это не сработало, и мое устройство зависает, как только я типа в EditText.

ответ

2

ваше приложение зависает, потому что mNumber.setText("...") запускает свой addTextChangedListener() снова и снова, и снова ...

Вы можете избежать этого, проверяя, если префикс уже установлен и только предваряя префикс, если это не ,

public void afterTextChanged(Editable editable) { 
    if (!mNumber.getText().startsWith("+91")) { 
     mNumber.setText("+91"+mNumber.getText()); 
    } 
} 
+0

Мне также нужно добавить- 'Selection.setSelection (mNumber.getText(), mNumber.getText(). Length());' иначе я вижу несколько + 91..пожалуйста, объясните, что он делает и почему это необходимо Вот? –

3

Вы вызывает бесконечный цикл, потому что вы звоните setText() из afterTextChanged(), то setText() звонит afterTextChanged() и так далее, и так далее.

вы можете изменить ваш afterTextChanged() к следующему,

public void afterTextChanged(Editable s) { 
    if(!s.toString().startsWith("+91")){ 
     s.insert(0, "+91"); 
    } 
} 

Таким образом, вы не вызывая setText() все время, а также чек там так, что вы не добавляя «+91» каждый раз, когда пользователь вводит что-то в EditText. Один из недостатков этого метода заключается в том, что вы не можете удалить «+91» по обратному пространству, как только он был автоматически вставлен в начале ввода.

+0

Мне также нужно добавить- Selection.setSelection (mNumber.getText(), mNumber.getText(). Length()); 'иначе я вижу несколько +91 ..пожалуйста, объясните, что он делает и почему это необходимо здесь? –

1
ET.addTextChangedListener(new TextWatcher() { 
      int count; 
      @Override 
      public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { 
      } 
      @Override 
      public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { 
       count=i2; 
      } 
      @Override 
      public void afterTextChanged(Editable s) { 
       if(!s.toString().startsWith("+91 ") && count!=0){ 
        s.insert(0, "+91 "); 
       } 
      } 
     }); 

Переменная count гарантирует, что +91 не добавляется дважды при удалении 1-го экземпляра +91.

Когда count = 0, это указывает на обратное пространство.

Смежные вопросы