Estou trabalhando em um projeto Android e estou usando um spinner que usa um adaptador de matriz que é preenchido no banco de dados.
Não consigo descobrir como definir o item selecionado programaticamente a partir da lista. Por exemplo, se, no botão giratório, tiver os seguintes itens:
- Categoria 1
- Categoria 2
- Categoria 3
Como programaticamente tornaria a Categoria 2 o item selecionado quando a tela é criada. Eu estava pensando que poderia ser semelhante ao c # IE Spinner.SelectedText = "Category 2", mas não parece haver nenhum método semelhante a este para o Android.
spinner.setSelection()
. Isso funcionaria muito bem. Você também pode criar um método que pode ajudá-lo a corresponder seus índices às respectivas seqüências de caracteres.Respostas:
Use o seguinte:
spinnerObject.setSelection(INDEX_OF_CATEGORY2)
.fonte
mySpinner.setSelection(arrayAdapter.getPosition("Category 2"));
Nenhuma dessas respostas me deu a solução, apenas trabalhou com isso:
fonte
Você pode usar o acima, como:
e, claro, você também pode selecionar por índice diretamente como
fonte
Category 2
seja uma String (supondo que ele tenha tentado usarSpinner.SelectedText = "Category 2"
), mas o código acima é para along
.adapter.getItem(position)
, nãoadapter.getItemId(position)
.Alguma explicação (pelo menos para Fragmentos - nunca tentei com Atividade pura). Espero que ajude alguém a entender melhor o Android.
A resposta mais popular de Arun George está correta, mas não funciona em alguns casos.
A resposta de Marco HC usa Runnable, que é o último recurso devido à carga adicional da CPU.
A resposta é - você deve simplesmente escolher o local correto para chamar setSelection () , por exemplo, funciona para mim:
Mas não funcionará em onCreateView () . Suspeito que essa seja a razão do interesse neste tópico.
O segredo é que, com o Android, você não pode fazer o que quiser em qualquer método - oops :( - os componentes podem não estar prontos. Como outro exemplo - você não pode rolar o ScrollView nem no onCreateView () nem no onResume () ( veja a resposta aqui )
fonte
Para encontrar um valor e selecioná-lo:
fonte
Por que você não usa seus valores do banco de dados e os armazena em um ArrayList e depois usa:
fonte
A solução ideal é:
Para obter a posição do item, adicione automaticamente a seguinte declaração
fonte
Você pode criar um método genérico para esse tipo de trabalho, como faço na minha UtilityClass, que é
fonte
Você pode definir facilmente assim: em
spinner.setSelection(1)
vez de 1, você pode definir qualquer posição da lista que gostaria de mostrar.fonte
Eu tenho um SimpleCursorAdapter, então eu tenho que duplicar os dados para usar o respose nesta postagem. Então, eu recomendo que você tente desta maneira:
Eu acho que é uma maneira real
fonte
Isso é trabalho para mim.
fonte
Se você possui uma lista de contatos, pode fazer isso:
fonte
Eu sei que já está respondido, mas código simples para selecionar um item, muito simples:
fonte
fonte
Isso é afirmado em comentários em outras partes desta página, mas consideramos útil extrair uma resposta:
Ao usar um adaptador, descobri que isso
spinnerObject.setSelection(INDEX_OF_CATEGORY2)
precisa ocorrer após asetAdapter
chamada; caso contrário, o primeiro item será sempre a seleção inicial.Isso é confirmado revisando o código AbsSpinner para
setAdapter
.fonte
Isto é o que eu uso no Kotlin:
fonte
indexOf
não conseguir fazer uma correspondência, ele retornará-1
, o que parece resultar no valor padrão selecionado porspinner.setSelection
. Eu estou bem com isso.No meu caso, esse código salvou meu dia:
fonte
Na maioria das vezes
spinner.setSelection(i); //i is 0 to (size-1) of adapter's size
não funciona. Se você acabou de ligarspinner.setSelection(i);
Depende da sua lógica.
Se o modo de exibição estiver totalmente carregado e você quiser chamá-lo da interface, sugiro que você chame
Ou, se você desejar alterar entre o ciclo de vida da atividade / fragmento, chame assim
fonte
Eu tinha criado uma função de extensão
Spinner
para carregar dados e rastrear a seleção de itens.Spinner.kt
Exemplo de uso
fonte
Isso funcionou para mim:
É semelhante à solução de @ sberezin, mas chama setSelection () em onStart ().
fonte
Infelizmente, o primeiro item na lista de matrizes é mostrado por padrão no widget giratório.Uma reviravolta seria encontrar o item selecionado anterior com cada elemento na lista de matrizes e trocar sua posição com o primeiro elemento. Aqui está o código.
fonte