Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to check TextInputLayout if error is enabled

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());
        }
    }
};

}

like image 457
Yarh Avatar asked Dec 14 '25 06:12

Yarh


1 Answers

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

like image 180
Yarh Avatar answered Dec 15 '25 19:12

Yarh