Fala, pessoal. Tenho um campo que está oculto no meu formulário e gostaria de deixá-lo obrigatório quando aparecesse e não obrigatório ao ficar invisível novamente. Contudo, depois que coloco ele invisível, depois de já ter ficado visível, o formulário continua apontando como obrigatório.
Qual seria o raciocínio, por gentileza?
private void verificaSituacao() {
spinnerSituacao.setOnItemClickListener((parent, view, position, id) -> {
String situacao_selecionada = spinnerSituacao.getEditableText().toString();
if (situacao_selecionada.equals(SITUACAO_CONTATO_ESCOLA_PARA) || situacao_selecionada.equals(SITUACAO_AMBIENTACAO_PARA)) {
campo_data_situacao_agendada.setVisibility(view.VISIBLE);
campo_nome_outraEscola.setVisibility(View.GONE);
campo_motivo_outraEscola.setVisibility(View.GONE);
configuraCampoObrigatorioSituacao(campo_data_situacao_agendada, true);
//SE TRUE, INDICA QUE É OBRIGATÓRIO
} else if (situacao_selecionada.equals(SITUACAO_MATRICULOU_OUTRA_ESCOLA)) {
campo_data_situacao_agendada.setVisibility(View.GONE);
campo_nome_outraEscola.setVisibility(View.VISIBLE);
campo_motivo_outraEscola.setVisibility(View.VISIBLE);
configuraCampoObrigatorioSituacao(campo_data_situacao_agendada, false);
//SE FALSE, INDICA QUE NÃO É OBRIGATÓRIO
} else {
campo_data_situacao_agendada.setVisibility(View.GONE);
campo_nome_outraEscola.setVisibility(View.GONE);
campo_motivo_outraEscola.setVisibility(View.GONE);
configuraCampoObrigatorioSituacao(campo_data_situacao_agendada, false);
//SE FALSE, INDICA QUE NÃO É OBRIGATÓRIO
}
});
}
private void configuraCampoObrigatorioSituacao(TextInputLayout situacao, boolean temData) {
EditText campoDataAgendada = situacao.getEditText();
ValidaCampoSituacao validador = new ValidaCampoSituacao(situacao, temData);
validadores.add(validador);
campoDataAgendada.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
validador.estaValido();
}
}
});
}
A classe "ValidaCampoSituacao" está assim:
public ValidaCampoSituacao(TextInputLayout textInputCampo, boolean temData) {
this.textInputCampo = textInputCampo;
this.temData = temData;
}
private boolean validaCampoObrigatorio() {
String texto = textInputCampo.getEditText().getText().toString();
if (texto.isEmpty() && temData) {
textInputCampo.setError(CAMPO_OBRIGATORIO);
return false;
}
return true;
}
@Override
public boolean estaValido() {
if (!validaCampoObrigatorio())
return false;
removeErro();
return true;
}