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); ArrayListpessoas = 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:
ArrayAdapterpessoasAdapter = 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.
muito bom seus artigos, você poderia publicá-los no Portal Android... é um fórum muito bom sobre a tecnologia, seus artigos teriam uma grande visibilidade. Abraço!
ResponderExcluirParabéns pelo artigo!
ResponderExcluirEu segui seu tutorial, mas gostaria de exibir o nome no spinner e no text receber o id selecionado... como poderia fazer isso?
Obrigada,
Olá, para mostrar o id no campo texto (output) você pode alterar esta linha 'output.setText(p.getNome() + " " + p.getIdade());' para 'output.setText(p.getId()+"");' ou ainda pode alterar a classe Pessoa e ao invés de utilizar o tipo primitivo int, utilize Integer para o atributo ID (não esqueça de alterar os getter e setter) e utilizar o método .toString da seguinte maneira: 'output.setText(p.getId().toString());'
ResponderExcluirEspero ter ajudado
Mtooo bom o artigo !! Resolveum problemão meu...
ResponderExcluirTeria como mostrar com exemplo pegar o id do item no spinner?
ResponderExcluirComo fazer usando sqlite para preencher o spinner e pegar o id do selecionado no spinner?
ResponderExcluirParabéns. Post simples e objetivo.
ResponderExcluirMeu ajudou muito.
Sampaio
Se no lugar do ArrayList fosse List funcionaria ? ou o ArrayAdapter
ResponderExcluirnão funciona para o List<>.
List itensEstados = localizacaoService.obter_Estados();
ResponderExcluirArrayList estados_list = new ArrayList();
for (Estado estado : itensEstados) {
estados_list.add(estado);
}
Uma maneira de converter list em ArrayList....
Agradeço pelo tópico, salvou mesmo 6 anos depois kkkk