Reputation: 4607
If editText1 is focus and editTextWrapper already shows error and I move frocus away(e.g to editText2) errorMessage will blink a bit ( as focusListener withl enable it again) and there will be small animation glitch.
Is there a way to check if TextInputLayout error is enabled (or other way to know that error is displayed, except intoducing external veriable to my class?
public class NoteCreateFragment extends Fragment{
@Bind(R.id.edit_text1) EditText editText1;
@Bind(R.id.edit_text2) EditText editText2;
@Bind(R.id.edit_text_wrapper) TextInputLayout editTextWrapper;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public View onCreateView(
LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState
){
View view = inflater.inflate(R.layout.fragment_note_create, container, false);
ButterKnife.bind(this, view);
editText1.addTextChangedListener(textWatcher);
editText1.setOnFocusChangeListener(focusListener);
return view;
}
@Override
public void onDestroyView(){
super.onDestroyView();
ButterKnife.unbind(this);
}
private void createTask(){
String text1 = editText1.getText().toString();
if(text1.isEmpty()){
editTextWrapper.setError("Please enter task name");
}
}
private TextWatcher textWatcher = 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){
if(s.length() > 3){ editTextWrapper.setErrorEnabled(false); }
}
@Override
public void afterTextChanged(Editable s){
}
};
private View.OnFocusChangeListener focusListener = new View.OnFocusChangeListener(){
@Override
public void onFocusChange(View v, boolean hasFocus){
if(!hasFocus && editText1.getText().toString().length() < 1){
editTextWrapper.setErrorEnabled(true);
editTextWrapper.setError("Please enter task name");
Log.e("TextInputLayout", editTextWrapper.getEditText().getError().toString());
}
}
};
}
Upvotes: 3
Views: 2294
Reputation: 4607
dont change setErrorEnabled()
in runtime, to show/hide error. Use setError(message)
to show error and setError(null)
to hide error. Thus
if(!TextUtils.isEmpty(textInputLayout.getError())
return true if error is vissble, flase otherwise
Upvotes: 3