Bom dia a todos.
O meu código salva os dados do Spinner e até então tudo certo,
Esta assim
contato.setCama(spnCama.getSelectedItem().toString());
Mas o código que preenche o Spinner com os dados salvos da erro, Caused by: java.lang.NumberFormatException:
Esta assim
spnMedida.setSelection(Integer.parseInt(contato.getMedida()));
Fiz assim e salvou sem erro
spnCama.setSelection(contato.getCama().indexOf(toString()));
Mas ao acessar o layout com os dados que foram salvos
o Spinner aponta sempre ao primeiro item.
Desde já agradeço quem me disser oque fiz de errado…
Voçê quer deixar o spinner pre-selecionado?
Se sim esse código pode te ajudar:
> private void definirVeiculo(long codVeiculo){
> Veiculo veiculo = veiculoRepository.buscaPorId(codVeiculo);
> if(veiculo != null){
> for(int i= 0;i<spVeiculos.getCount();i++){
> if(spVeiculos.getItemAtPosition(i).toString().equals(veiculo.getPlaca())){
> spVeiculos.setSelection(i);
> }
> }
> }
> }
> </code>
No caso ele faz uma comparação de strings no if, se for igual ele seta o spinner na posição da comparação.
Espero que ajude.
Essa é a minha intenção deixar o Spinner pre selecionado
e o seu código realmente me ajudou. Muito obrigado.
Pensei em algo mais simples, talvez por isso não consegui resolver.
Por favor me ajude a entender algo.
Essa parte do código salva o item do Spinner e os demais da activity…
private void salvar() {
try {
contato.setNome(edtNome.getText().toString());
contato.setQuantidade(edtQuantidade.getText().toString());
contato.setCama(spnCama.getSelectedItem().toString());
contato.setMedida(String.valueOf(spnMedida.getSelectedItemPosition()));
contato.setTecido(String.valueOf(spnTecido.getSelectedItemPosition()));
if(contato.getId() == 0)
repositorioContato.inserir(contato);
else
repositorioContato.alterar(contato);
} catch (Exception ex) {
MessageBox.show(this, "Erro", "Erro ao salvar dados: " + ex.getMessage());
}
}
Porém o spnCama eu alterei para salvar a string e não a posição,
pois precisaria de setar e apresentar esta string em um textView de outra activity.
Já este código preenche a acticity com os dados salvos,
e eu alterei o Spinner spnCama com o código que você me apresentou.
private void preencheDados() {
edtNome.setText(contato.getNome());
edtQuantidade.setText(contato.getQuantidade());
for(int i= 0;i<spnCama.getCount();i++){
if(spnCama.getItemAtPosition(i).toString().equals(contato.getCama())){
spnCama.setSelection(i);
}
spnMedida.setSelection(Integer.parseInt(contato.getMedida()));
spnTecido.setSelection(Integer.parseInt(contato.getTecido()));
}
}
Porque assim dava erro NumberFormatException?
spnCama.setSelection(Integer.parseInt(contato.getCama()));
Tem jeito de setar esta string sem usar for e if ?
Complicado tratar esses dados…
A questão é que primeiramente se você tivesse lido o que o setSelection faz, já tinha matado a charada rs, ele serve para você settar a posição que você queira que apareça pré selecionado.
Exemplo:
Vamos supor que tenhamos esse array ou lista abaixo:
{“amarelo”,“verde”,“azul”}
Eu quero que apareça pré selecionado o azul no spinner:
spinner.setSelection(2);
Então se você tiver outra forma de saber a posição do item que você quer que seja settado não precisa do if.
Agora o erro se da porque o getCama() não retorna um inteiro.