Je travaille sur un projet Android et j'utilise un spinner qui utilise un adaptateur de tableau qui est rempli à partir de la base de données.
Je ne peux pas savoir comment définir par programmation l'élément sélectionné dans la liste. Par exemple si, dans le spinner, j'ai les éléments suivants:
- Catégorie 1
- Catégorie 2
- Catégorie 3
Comment pourrais-je faire de la catégorie 2 par programme l'élément sélectionné lors de la création de l'écran. Je pensais que cela pourrait être similaire à c # IE Spinner.SelectedText = "Catégorie 2" mais il ne semble pas y avoir de méthode similaire à celle-ci pour Android.
spinner.setSelection()
. Cela fonctionnerait très bien. Vous pouvez également créer une méthode qui peut vous aider à faire correspondre vos index à leurs chaînes réelles.Réponses:
Utilisez ce qui suit:
spinnerObject.setSelection(INDEX_OF_CATEGORY2)
.la source
mySpinner.setSelection(arrayAdapter.getPosition("Category 2"));
Aucune de ces réponses ne m'a donné la solution, a seulement fonctionné avec ceci:
la source
Vous pouvez utiliser ce qui précède comme:
& bien sûr, vous pouvez également sélectionner par index directement comme
la source
Category 2
dont je suppose qu'il s'agit d'une chaîne (en supposant qu'il a essayé d'utiliserSpinner.SelectedText = "Category 2"
) mais le code ci-dessus est pour along
.adapter.getItem(position)
, nonadapter.getItemId(position)
.Quelques explications (au moins pour les fragments - jamais essayées avec une activité pure). J'espère que cela aidera quelqu'un à mieux comprendre Android.
La réponse la plus populaire d' Arun George est correcte mais ne fonctionne pas dans certains cas.
La réponse de Marco HC utilise Runnable qui est un dernier recours en raison de la charge supplémentaire du processeur.
La réponse est - vous devez simplement choisir le bon endroit pour appeler à setSelection () , par exemple, cela fonctionne pour moi:
Mais cela ne fonctionnera pas dans onCreateView () . Je soupçonne que c'est la raison de l'intérêt pour ce sujet.
Le secret est qu'avec Android, vous ne pouvez pas faire ce que vous voulez dans n'importe quelle méthode - oups :( - les composants peuvent ne pas être prêts. Comme autre exemple - vous ne pouvez pas faire défiler ScrollView ni dans onCreateView () ni dans onResume () ( voir la réponse ici )
la source
Pour rechercher une valeur et la sélectionner:
la source
Pourquoi n'utilisez-vous pas vos valeurs de la base de données et les stockez sur une liste de tableaux, puis utilisez simplement:
la source
La solution optimale est:
Pour obtenir la position de l'élément, ajoutez automatiquement l'instruction suivante
la source
Vous pouvez faire une méthode générique pour ce genre de travail comme je le fais dans ma UtilityClass qui est
la source
Vous pouvez facilement définir comme ceci:
spinner.setSelection(1)
au lieu de 1, vous pouvez définir n'importe quelle position de liste que vous souhaitez afficher.la source
J'ai un SimpleCursorAdapter donc je dois dupliquer les données pour utiliser la réponse dans ce post. Donc, je vous recommande d'essayer de cette façon:
Je pense que c'est une vraie façon
la source
C'est du travail pour moi.
la source
Si vous avez une liste de contacts, vous pouvez y aller:
la source
Je sais que c'est déjà répondu, mais code simple pour sélectionner un élément, très simple:
la source
la source
Ceci est indiqué dans les commentaires ailleurs sur cette page, mais a jugé utile de le retirer dans une réponse:
Lors de l'utilisation d'un adaptateur, j'ai constaté que les
spinnerObject.setSelection(INDEX_OF_CATEGORY2)
besoins devaient se produire après l'setAdapter
appel; sinon, le premier élément est toujours la sélection initiale.Ceci est confirmé en examinant le code AbsSpinner pour
setAdapter
.la source
Voici ce que j'utilise dans Kotlin:
la source
indexOf
ne peut pas faire de correspondance, il revient-1
, ce qui semble entraîner la valeur par défaut sélectionnée parspinner.setSelection
. Je suis d'accord avec ça.Dans mon cas, ce code m'a sauvé la journée:
la source
La plupart du temps,
spinner.setSelection(i); //i is 0 to (size-1) of adapter's size
ça ne marche pas. Si vous appelezspinner.setSelection(i);
Cela dépend de votre logique.
Si la vue est entièrement chargée et que vous souhaitez l'appeler à partir de l'interface, je vous suggère d'appeler
Ou si vous souhaitez basculer entre le cycle de vie d'une activité ou d'un fragment, appelez comme ceci
la source
J'avais fait une fonction d'extension
Spinner
pour le chargement des données et le suivi de la sélection des éléments.Spinner.kt
Exemple d'utilisation
la source
Cela a fonctionné pour moi:
Elle est similaire à la solution de @ sberezin mais appelle setSelection () dans onStart ().
la source
J'ai eu le même problème depuis hier.Malheureusement, le premier élément de la liste des tableaux est affiché par défaut dans le widget spinner.Un revirement serait de trouver l'élément sélectionné précédent avec chaque élément de la liste des tableaux et d'échanger sa position avec le premier élément. Voici le code.
la source