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.
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