Yarh
Yarh

Reputation: 4607

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

}

Upvotes: 3

Views: 2294

Answers (1)

Yarh
Yarh

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

Related Questions