segunda-feira, 29 de novembro de 2010

Usando RadioGroup no Android

                Neste artigo vou demonstrar como recuperar um valor selecionado, selecionar um valor e algumas propriedades do RadioGroup.
                Para demonstrar o uso do RadioGroup vamos usar como exemplo um campo muito comum em aplicações de cadastro, o Estado Civil. Este campo pode ter os seguintes valores solteiro(a), casado(a), separado(a), divorciado(a) e  viúvo(a), abaixo segue o exemplo da tela e o bloco do arquivo de layout.

<radiogroup android:id="@+id/rgEstadoCivil" android:layout_height="wrap_content" android:layout_width="wrap_content" android:orientation="vertical">
    <radiobutton android:checked="true" android:id="@+id/rbSolteiro" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="Solteiro(a)">
    </radiobutton>
    <radiobutton android:id="@+id/rbCasado" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="Casado(a)">
    </radiobutton>
    <radiobutton android:id="@+id/rbSeparado" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="Separado(a)">
    </radiobutton>
    <radiobutton android:id="@+id/rbDivorciado" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="Divorciado(a)">
    </radiobutton>
    <radiobutton android:id="@+id/rbViuvo" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="Viúvo(a)">
    </radiobutton>
</radiogroup>
                O que vale destacar aqui são as propriedades do RadioGroup, android:id="@+id/rgEstadoCivil" e android:orientation="vertical" onde :
                               android:id : é a identificação do componente dentro do nosso programa, @+id é a classe que os componentes ficarão agrupados, depois da /(barra) vem o nome do componente,  que no nosso caso é rgEstadoCivil (mas abaixo irei mostrar no que este atributo se transforma). É importante lembrar que este nome deve ser único;
                               android:orientation: é a orientação dos radiobuttons, ela pode ter dois valores “vertical” ou “horizontal”.
                Outro ponto a ser observado é que todos os radiobutton devem estar dentro da tag RadioGroup, isto é fundamental para que dentro do nosso programa possamos identificar quem foi selecionado e para o próprio sistema controlar qual radiobutton vai estar selecionado, ou seja, quando o usuário clicar em um ele desmarca o outro.
                Dos RadiosButtons vamos destacar as propriedades android:id="@+id/rbSolteiro", android:text="Solteiro(a)" e android:checked="true":
                               android:id: é a mesma coisa do RadioGroup, alias funciona igual para qualquer componente;
                               android:text: é o texto que vai identificar o radiobutton (texto do lado da bolinha);
                               android:checked: para selecionar o radiobutton, está propriedade somente aceita os valores "true" e "false", lembrando que apenas um radiobutton pode estar como true e o valor default é false (essa propriedade na verdade só precisa ser definida para o radiobutton que vai iniciar selecionado, que neste caso foi o primeiro, solteiro).
                Agora vamos ver como fazer para verificar o radiobutton selecionado, mas antes vamos olhar o trecho gerado no arquivo R.java do nosso radiogroup e dos radiosbuttons :
public final class  R {
   //...  
   public static final class id {
       public static final int rbCasado=0x7f05002d;
       public static final int rbDivorciado=0x7f05002f;
       public static final int rbSeparado=0x7f05002e;   
       public static final int rbSolteiro=0x7f05002c;
       public static final int rbViuvo=0x7f050030;
       public static final int rgEstadoCivil=0x7f05002b;
   }
   //...
}
                Repare que foi criado uma classe chamada R e dentro dela outra chamada id (lembre-se da propriedade android:id onde colocamos o @+id, serve para criar esta classe, não é obrigatório o uso do id, pode ser qualquer nome), dentro dela temos as constantes com os nomes atribuídos no arquivo de layout para o radiogroup e os radiosbuttons com valores em hexa decimal. Este arquivo é gerado para facilitar nosso desenvolvimento, ao invés de usarmos este numero vamos utilizar os componentes através das constantes. Abaixo segue o código para verificar qual é o radiobutton selecionado:
                              
RadioGroup rgEstadoCivil = (RadioGroup) findViewById(R.id.rgEstadoCivil);
switch (rgEstadoCivil.getCheckedRadioButtonId()) {
    case R.id.rbSolteiro:
        Toast.makeText(MainActivity.this, "Solteiro selecionado !", Toast.LENGTH_SHORT).show();
        break;
    case R.id.rbCasado:
        Toast.makeText(MainActivity.this, "Casado selecionado !", Toast.LENGTH_SHORT).show();
        break;
    case R.id.rbSeparado:
        Toast.makeText(MainActivity.this, "Separado selecionado !", Toast.LENGTH_SHORT).show();
        break;
    case R.id.rbDivorciado:
        Toast.makeText(MainActivity.this, "Divorciado selecionado !", Toast.LENGTH_SHORT).show();
        break;
    case R.id.rbViuvo:
        Toast.makeText(MainActivity.this, "Viúvo selecionado !", Toast.LENGTH_SHORT).show();
        break;
}
           
                A primeira função que vamos destacar é o findViewById. Este comando serve para localizar o componente e retornar o objeto que foi atribuído a ele, no nosso caso um checkbox.
                Depois usamos o método getCheckedRadioButtonId(), este método retorna o id do radiobutton selecionado, onde podemos fazer a comparação com as constantes geradas no arquivo R.java, conforme o exemplo demonstra. Também podemos recuperar o componente radiobutton com a função findViewById (igual fizemos com o radiogroup, se precisar fazer alguma alteração especifica). O objeto Toast  e a função makeText serve para dar um alerta para o usuário, farei um artigo a respeito dessa classe em breve.          
                Agora vamos deixar um radiobutton selecionado abaixo segue o código :
rgEstadoCivil.check(R.id.rbSolteiro);
                Aqui a única função é a check, onde você passa a identificação do radiobutton, ele vai marcar o que você passou e deixar o restante desmarcado.

Referências:

5 comentários :

  1. Rapaiz show a explicação deu certinho aki.. é nooix memo flw abrass

    ResponderExcluir
  2. maravilha de tutorial! obrigado por compartilhar!

    ResponderExcluir
  3. Como faço pra pegar o texto que está na radiobutton e enviar para outra activity?

    ResponderExcluir