Como você pode definir o ouvinte de evento para um Spinner quando o item selecionado é alterado?
Basicamente, o que estou tentando fazer é algo semelhante a isto:
spinner1.onSelectionChange = handleSelectionChange;
void handleSelectionChange(Object sender){
//handle event
}
android
events
spinner
android-spinner
Soni Ali
fonte
fonte
Respostas:
Algumas das respostas anteriores não estão corretas. Eles funcionam para outros widgets e visualizações, mas a documentação para o widget Spinner afirma claramente:
Melhor usar OnItemSelectedListener () :
Isso funciona para mim.
Observe que o método onItemSelected também é chamado quando a exibição está sendo construída, para que você possa colocá-lo dentro da
onCreate()
chamada de método.fonte
onItemSelected(...)
não é atingido. (Eu sei porque eu só descobriu isso da maneira mais difícil.)Nota: Lembre - se de uma coisa.
O
OnItemSelectedListener
evento giratório será executado duas vezes:Tente diferenciar os dois usando a variável flag.
fonte
Você pode implementar a
AdapterView.OnItemSelectedListener
classe em sua atividade.E então use a linha abaixo dentro
onCreate()
Em seguida, substitua esses dois métodos:
fonte
https://stackoverflow.com/q/1714426/811625
Você pode evitar que o OnItemSelectedListener () seja chamado com uma verificação simples: armazene o índice de seleção atual em uma variável inteira e verifique dentro do onItemSelected (..) antes de fazer qualquer coisa.
Por exemplo:
De causa, o
iCurrentSelection
deve estar no escopo do objeto para que isso funcione!fonte
iCurrentSelection
variável for declarada nessa classe anônima, ela funcionará bem. Você pode inicializá-lo para -1 para que o código seja executado na primeira chamada.Encontre o nome do seu girador e encontre o ID e implemente esse método.
fonte
Não importa se você definir OnItemSelectedListener em onCreate ou onStart - ainda será chamado durante a criação da atividade ou o início (respectivamente).
Assim, podemos configurá-lo em onCreate (e NÃO em onStart!).
Basta adicionar um sinalizador para descobrir a primeira inicialização:
em onCreate (ou onCreateView), basta:
fonte
Os documentos para o widget giratório dizem
Você deve usar
setOnItemSelectedListener
para lidar com o seu problema.fonte
fonte
pegue uma variável global para a seleção atual do spinner:
fonte
Se você deseja um verdadeiro onChangedListener (). Armazene o valor inicial no manipulador e verifique se ele foi alterado. É simples e não requer uma variável global. Funciona se você tiver mais de um botão giratório na página.
...
Os objetos são seus amigos, use-os.
fonte
fonte
Isso funcionará para inicializar o girador e o findviewbyid e, usando isso, ele funcionará
fonte
A melhor maneira que eu acho que seria ter um
flagitemselected = 0;
inonCreate()
. E no item selecionado, o evento incrementa esse sinalizador, ieflagitemselected++
; e depois verifiqueIsso vai ajudar, eu acho.
fonte
Um truque que encontrei foi colocar seus setOnItemSelectedListeners em onWindowFocusChanged em vez de em onCreate. Ainda não encontrei nenhum efeito colateral ruim dessa maneira. Basicamente, configure os ouvintes depois que a janela for fechada. Não sei ao certo quantas vezes o onWindowFocusChanged é executado, mas é fácil o suficiente criar uma variável de bloqueio se você a encontrar executando com muita frequência.
Eu acho que o Android pode estar usando um sistema de processamento baseado em mensagens e, se você colocar tudo no onCreate, pode se deparar com situações nas quais o botão giratório é preenchido depois de ser desenhado. Portanto, seu ouvinte será acionado depois que você definir o local do item. Este é um palpite, é claro, mas fique à vontade para me corrigir.
fonte
Por padrão, você obterá o primeiro item da matriz giratória através de
sempre que você selecionou o valor no botão giratório, isso fornecerá o valor selecionado
se você deseja a posição do item selecionado, faça-o assim
as duas respostas acima são para sem aplicar o ouvinte
fonte