2016-02-29 2 views
1

Этот код находится в файле макета.сообщение об ошибке непрерывно отображается в TextInputLayout

<android.support.design.widget.TextInputLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/textInputLayoutMobile" 
    > 

    <EditText 
     android:inputType="number" 
     android:id="@+id/mobileNumber" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:maxLength="10" 
     android:hint="Mobile Number" /> 

</android.support.design.widget.TextInputLayout> 

Это код Java.

TextInputLayout textInputLayoutMobile = (TextInputLayout)findViewById(R.id.textInputLayoutMobile); 
textInputLayoutMobile.setErrorEnabled(true); 
textInputLayoutMobile.setError("This field is required"); 

Текущее поведение: Когда мы нажимаем на поле, он показывает, «Это поле обязательно». Также, когда мы начинаем вводить текст в поле, это сообщение не исчезает.

Желаемое поведение: Когда мы нажимаем в первый раз, он не должен показывать «Это поле обязательно». Когда мы переходим в другое поле после касания этого поля и без ввода каких-либо данных, оно должно показывать: «Это поле требуется». Также, когда мы начинаем вводить текст в поле, это сообщение должно исчезнуть.

ответ

0

Я думаю, вы должны использовать текст изменений слушателя

edit.addTextChangedListener(new TextWatcher() { 
      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

      } 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 
      //set error 
      } 

      @Override 
      public void afterTextChanged(Editable s) { 

      } 
     }); 
    } 

и его метод, чтобы установить выходное желание .. надеюсь помочь вам!

0

Думаю, вам нужно взять ссылку EditText, а не TextInputLayout. Попробуйте

EditText editText = (EditText)findViewById(R.id.mobileNumber); 
editText.setError("This field is required"); 
+1

вы уверены, что EditText имеет метод .setErrorEnabled (true); ? –

0

Я считаю, что ошибка в том, что эти две строки кода используются при извлечении textInputLayoutMobile из макета (вероятно, в onCreate). Таким образом, для view всегда отображается это сообщение об ошибке.

textInputLayoutMobile.setErrorEnabled(true); 
textInputLayoutMobile.setError("This field is required"); 

Я полагаю, эти две линии должны быть перемещены с этой точки и установить там, где вы должны подтвердить textInputLayoutMobile вход и принятия решения о том, что проверка является неправильным, например, в обратном вызове или прослушивателе onClick. Кроме того, когда ваш вклад подтверждается истина, то устанавливается textInputLayoutMobile.setErrorEnabled(false);

Смотрите пример здесь: http://code.tutsplus.com/tutorials/creating-a-login-screen-using-textinputlayout--cms-24168

0

Я думаю, вам нужно взять идентификатор = «@ + идентификатор/MobileNumber», установите виджет и не пытаться что-то вроде этого

your_widget.setOnClickListener (новый OnClickListener() {

 public void onClick(final View v) { 
      if (yourwidget.getText().toString().length() == 0) { 
       yourwidget.setError("This field is required");} 

еще и т.д. ...

Вы можете использовать этот элемент управления на «следующей» кнопке или что-то в этом роде (кнопка «сохранить» и т. Д.), Которые были введены непосредственно на поле (извините за мой английский)

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