9
respostas

Pegar valores do Spinner e RadioButton

Nos exemplos o instrutor fez da seguinta forma para salvar no banco

public class FormularioHelper {

    private final EditText campoNome;
    private final EditText campoEndereco;
    private final EditText campoTelefone;
    private final EditText campoSite;
    private final RatingBar campoNota;
    private final ImageView campoFoto;

    private Aluno aluno;

    public FormularioHelper(FormularioActivity activity) {
        campoNome = (EditText) activity.findViewById(R.id.formulario_nome);
        campoEndereco = (EditText) activity.findViewById(R.id.formulario_endereco);
        campoTelefone = (EditText) activity.findViewById(R.id.formulario_telefone);
        campoSite = (EditText) activity.findViewById(R.id.formulario_site);
        campoNota = (RatingBar) activity.findViewById(R.id.formulario_nota);
        campoFoto = (ImageView) activity.findViewById(R.id.formulario_foto);
        aluno = new Aluno();
    }

    public Aluno pegaAluno() {
        aluno.setNome(campoNome.getText().toString());
        aluno.setEndereco(campoEndereco.getText().toString());
        aluno.setTelefone(campoTelefone.getText().toString());
        aluno.setSite(campoSite.getText().toString());
        aluno.setNota(Double.valueOf(campoNota.getProgress()));
        aluno.setCaminhoFoto((String) campoFoto.getTag());
        return aluno;
    }
}

Queria saber como faço para pegar um valor de um Spinner e de um RadioButton também. As linhas comentadas é onde estou com problema. Deem atenção para o método pegaProcessoPraCadastro() e palpitem sobre o construtor se eu tiver que mudar alguma coisa nele. Também vou mostrar as classes de modelo. Meu código de início ta assim:

public class FormularioProcessoHelper {
    private ImageView ivCaminhoFoto;
    private Spinner spPromotores;
    private RadioButton rbFavoravel;
    private RadioButton rbDesfavoravel;
    private RadioGroup radioGroup;
    private EditText edtObservacao;
    private Button btnDataProcesso;

    private Processo processo;

    public FormularioProcessoHelper(FormularioProcessoActivity activity) {
        ivCaminhoFoto = (ImageView) activity.findViewById(R.id.iv_foto_selecionada);
        spPromotores = (Spinner) activity.findViewById(R.id.spinner_promotores);
        rbFavoravel = (RadioButton) activity.findViewById(R.id.posicao_judicial_favoravel);
        rbDesfavoravel = (RadioButton) activity.findViewById(R.id.posicao_judicial_desfavoravel);
        edtObservacao = (EditText) activity.findViewById(R.id.edt_observacao);
        btnDataProcesso = (Button) activity.findViewById(R.id.btn_data);

        processo = new Processo();
    }

    public Processo pegaProcessoPraCadastro() {
        Processo processo = new Processo();
        processo.setCaminhoFoto((String) ivCaminhoFoto.getTag());
        processo.setPosicao(radioGroup.getCheckedRadioButtonId()); // AQUI, QUERIA PEGAR O VALOR DO RADIOBUTTON SELECIONADO
        processo.setPromotor(spPromotores.getSelectedItemPosition()); //AQUI --//-- SPINNER SELECIONADO
        processo.setDataProcesso(btnDataProcesso.PegarAData()); //AQUI --//-- A DATA SETADA PELO USUARIO
        processo.setObservacao(edtObservacao.getText().toString());
        return processo;
    }
}

Algum help? Agradeço desde já!

9 respostas

Eduardo, tudo bem ?

A marca triste do radio button é que você vai precisar manipular o objeto que foi escolhido via código.

Ou seja, pegar o id e ai trabalhar com algum tratamento para cada caso, cada botão.

Já o spinner, é como se fosse uma lista, a forma de trabalhar é a mesma. Você precisa pegar qual foi o item selecionado assim que ele clica no item, existe um listener para isso. Você também pode, se tiver a lista, pegar baseado na posição do item selecionado.

E ai Matheus, poderia me da um exemplo de como fazer esse código para pegar o Radio Button e salvar no banco? E nesse caso, eu teria que ter um método no DAO só para salvar a opção dos Radio Buttons ?

Eduardo,

Você pode fazer esse tipo de coisa :

switch (rd_group.getCheckedRadioButtonId()){
          case R.id.rd_btn1:
            // define o valor
              break;
          case R.id.rd_btn2:
            // define o valor
              break;
          case R.id.rd_btn3:
            // define o valor
              break;
          case R.id.rd_btn4:
            // define o valor
              break;
        }

Essa parte é tranquila, minha dúvida é como pegar esse valor e salvar no banco, usando essa mesma ideia do meu método:

public Processo pegaProcessoPraCadastro() {
        Processo processo = new Processo();
        processo.setCaminhoFoto((String) ivCaminhoFoto.getTag());
        processo.setPosicao(radioGroup.getCheckedRadioButtonId()); // AQUI, QUERIA PEGAR O VALOR DO RADIOBUTTON SELECIONADO
        processo.setPromotor(spPromotores.getSelectedItemPosition()); //AQUI --//-- SPINNER SELECIONADO
        processo.setDataProcesso(btnDataProcesso.PegarAData()); //AQUI --//-- A DATA SETADA PELO USUARIO
        processo.setObservacao(edtObservacao.getText().toString());
        return processo;
    }

Você vai precisar criar um método para retornar o seu objeto baseado no item clicado.

public Retorno pegaValor(){
switch (rd_group.getCheckedRadioButtonId()){
          case R.id.rd_btn1:
            // define o valor
              return valor;
          case R.id.rd_btn2:
            // define o valor
              return valor;
          case R.id.rd_btn3:
            // define o valor
              return valor;
          case R.id.rd_btn4:
            // define o valor
              return valor;
        }
}

Ai é só usar esse método para na hora de setar

Então Matheus, fiz desta forma


    public Processo pegaProcessoPraCadastro() {
        Processo processo = new Processo();
        processo.setCaminhoFoto((String) ivCaminhoFoto.getTag());
        processo.setPosicao(getRadioGroupId().toString()); //NESTA LINHA
        processo.setDataProcesso((String) btnDataProcesso.getTag());
        processo.setObservacao(edtObservacao.getText().toString());
        return processo;
    }

    public String getRadioGroupId() {
        FormularioProcessoActivity activity = null;
        int id = radioGroup.getCheckedRadioButtonId();
        RadioButton rbSelecionado = (RadioButton) activity.findViewById(id);

        return rbSelecionado.getText().toString();
    }

Mas ainda não to conseguindo salvar.

Eduardo,

O que ele está devolvendo para você ?

Ele ta me devolvendo um erro em uma linha de outra classe. De qualquer modo, vou desistir desse método e partir pra outro. Mesmo assim, muito obrigado Matheus :) abs.