Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Campo oculto obrigatório

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;
    }
2 respostas
solução!

Fala Thiago, tudo bem ?

Cara minha sugestão para esse caso é a seguinte, remover o validador no momento que deixar o campo com visibilidade gone, você vai precisar dar um jeito de procurar ele na lista de validadores.

validadores.remove(validadorDesseCampo);

Fazendo isso deve funcionar.

Fala, Matheus. Bom e tu?

Rapaz, tinha até esquecido desse método. Consegui. Deu certo. Obrigado.