Utilizando spinner com objetos
Autor: Vitor Bertazoli | Publicado: 2011-02-03T17:04:00-02:00

Olá amigos

Neste post vamos mostrar como utilizar um spinner com objetos. No site oficial temos apenas exemplos com Strings e arquivos xml, porém é possivel utilizar spinner com qualquer tipo de objeto.


Partiremos da premissa que você já tem um projeto criado. No nosso caso criamos um projeto novo chamado SpinnerExample.
A primeira coisa que fizemos foi incluir um spinner no layout "main" e alterar o TextView padrão. Nosso main.xml ficou da seguinte forma:









Feito isso, criamos uma nova classe chamada Pessoa.java, com os atributos, id, nome, sobrenome e idade. Criamos também getters e setters para todos os atributos. No final criamos o método toString() para a classe Pessoa. Este é o passo mais importante, pois sem este método você terá uma exceção.
Nossa classe Pessoa ficou da seguinte forma:


package br.com.icoders;

public class Pessoa {
private int id;
private String nome;
private String sobrenome;
private int idade;

public int getId() {
 return id;
}
public void setId(int id) {
 this.id = id;
}
public String getNome() {
 return nome;
}
public void setNome(String nome) {
 this.nome = nome;
}
public String getSobrenome() {
 return sobrenome;
}
public void setSobrenome(String sobrenome) {
 this.sobrenome = sobrenome;
}
public int getIdade() {
 return idade;
}
public void setIdade(int idade) {
 this.idade = idade;
}
//Aqui esta a mágica, sem este método você terá uma exceção
public String toString() {
 return (this.getNome() + " " + this.getSobrenome());
}
}


Agora vamos para a nossa Activity, mostraremos como colocar os objetos no spinner e depois recupera-los.
Primeiro criamos um output e um spinner logo abaixo da declaração da classe:

public class SpinnerExample extends Activity {
private TextView output;
private Spinner spinner;


depois dentro do método onCreate mapeamos da seguinte forma:

       spinner = (Spinner) findViewById(R.id.spinner);
       output = (TextView) findViewById(R.id.output);


Criamos 2 instâncias de Pessoa e os adicionamos a um ArrayList do tipo Pessoa:

       Pessoa p1 = new Pessoa();
       p1.setId(0);
       p1.setNome("Vitor");
       p1.setSobrenome("Bertazoli");
       p1.setIdade(28);
       Pessoa p2 = new Pessoa();
       p2.setId(1);
       p2.setNome("Rafael");
       p2.setSobrenome("de Araújo");
       p2.setIdade(24);
      
       ArrayList pessoas = new ArrayList();
       pessoas.add(p1);
       pessoas.add(p2);


O próximo passo é criar um ArrayAdapter, onde vamos passar nosso ArrayList de pessoas como parâmetro e então fazer com que nosso spinner utilize o ArrayAdapter que acabamos de criar:


       ArrayAdapter pessoasAdapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, pessoas);
       spinner.setAdapter(pessoasAdapter);


Feito isso já conseguimos ver nossos objetos sendo mostrados no Spinner.

O próximo passo é recuperar o que está no spinner, para isso criamos um listener, verificamos o que foi selecionado e mostramos no nosso TextView output.
O código para isto ficou da seguinte forma:

       spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
  @Override
  public void onItemSelected(AdapterView parent, View arg1,
    int arg2, long arg3) {
   Pessoa p = (Pessoa) parent.getSelectedItem();
   output.setText(p.getNome() + " " + p.getIdade());
  }
  @Override
  public void onNothingSelected(AdapterView arg0) {
  }
 });


Pronto, agora você já consegue selecionar cada um dos itens no seu spinner e mostra-los no TextView.
No final não é nenhum bicho de 7 cabeças, tudo o que precisamos é do método toString no nosso objeto.