J'ai une vue de mise à jour, où je dois présélectionner la valeur stockée dans la base de données pour un Spinner.
J'avais en tête quelque chose comme ça, mais ça Adapter
n'a pas de indexOf
méthode, donc je suis coincé.
void setSpinner(String value)
{
int pos = getSpinnerField().getAdapter().indexOf(value);
getSpinnerField().setSelection(pos);
}
Un moyen simple de définir le spinner en fonction de la valeur est
Il existe déjà du chemin vers du code complexe, c'est beaucoup plus simple.
la source
break;
lorsque l'index est trouvé pour accélérer le processus.0
, vous devez retourner-1
si la valeur n'est pas trouvée - comme indiqué dans ma réponse: stackoverflow.com/a/32377917/1617737 :-)0
comme scénario de sauvegarde. Si vous définissez-1
quel élément serait visible sur le spinner, je suppose que le 0ème élément de l'adaptateur spinner, l'ajout de -1 ajoute également un surpoids pour vérifier si la valeur est -1 ou non, car la définition de -1 entraînera une exception.Je garde une liste de tableaux séparée de tous les éléments de mes Spinners. De cette façon, je peux faire indexOf sur ArrayList et ensuite utiliser cette valeur pour définir la sélection dans le Spinner.
la source
Sur la base de la réponse de Merrill , j'ai trouvé cette solution à ligne unique ... ce n'est pas très joli, mais vous pouvez blâmer quiconque maintient le code pour
Spinner
avoir négligé d'inclure une fonction qui fait cela pour cela.Vous obtiendrez un avertissement sur la façon dont la conversion en un
ArrayAdapter<String>
n'est pas cochée ... vraiment, vous pouvez simplement utiliser unArrayAdapter
comme Merrill, mais cela échange simplement un avertissement contre un autre.la source
si vous utilisez un tableau de chaînes, c'est la meilleure façon:
la source
Vous pouvez également l'utiliser,
la source
Si vous avez besoin d'une méthode indexOf sur n'importe quel ancien adaptateur (et que vous ne connaissez pas l'implémentation sous-jacente), vous pouvez utiliser ceci:
la source
Sur la base de la réponse de Merrill, voici comment faire avec un CursorAdapter
la source
Utilisez la ligne suivante pour sélectionner à l'aide de la valeur:
la source
J'utilise un adaptateur personnalisé, pour cela ce code suffit:
Ainsi, votre extrait de code sera comme ceci:
la source
Ceci est ma méthode simple pour obtenir l'index par chaîne.
la source
Vous pouvez utiliser cette méthode, rendez votre code plus simple et plus clair.
J'espère que ça aide.
la source
voici ma solution
et getItemIndexById ci-dessous
J'espère que cette aide!
la source
Voici comment le faire si vous utilisez un
SimpleCursorAdapter
(oùcolumnName
est le nom de la colonne db que vous avez utilisée pour remplir votrespinner
):Aussi (un raffinement de la réponse d' Akhil ), c'est la façon correspondante de le faire si vous remplissez votre Spinner à partir d'un tableau:
la source
Si vous définissez un tableau XML sur le spinner dans la disposition XML, vous pouvez le faire
la source
Il existe en fait un moyen d'obtenir cela en utilisant une recherche d'index sur AdapterArray et tout cela peut être fait avec réflexion. Je suis même allé plus loin car j'avais 10 Spinners et je voulais les définir dynamiquement à partir de ma base de données et la base de données ne contient que la valeur, pas le texte car le Spinner change en fait de semaine en semaine, donc la valeur est mon numéro d'identification de la base de données.
Voici la recherche indexée que vous pouvez utiliser sur presque toutes les listes tant que les champs sont au niveau supérieur de l'objet.
La méthode de conversion qui peut être créée pour toutes les primitives en est une pour string et int.
la source
Pour que l'application se souvienne des dernières valeurs de spinner sélectionnées, vous pouvez utiliser le code ci-dessous:
Le code ci-dessous lit la valeur du spinner et définit la position du spinner en conséquence.
Et mettez ci-dessous le code où vous savez que les dernières valeurs de spinner sont présentes, ou ailleurs si nécessaire. Ce morceau de code écrit essentiellement la valeur de spinner dans SharedPreferences.
la source
J'ai eu le même problème lors de la tentative de sélection de l'élément correct dans un spinner rempli à l'aide d'un curseur. J'ai récupéré l'ID de l'élément que je voulais d'abord sélectionner dans le tableau 1, puis j'ai utilisé un CursorLoader pour remplir le spinner. Dans onLoadFinished, j'ai parcouru le curseur en remplissant l'adaptateur du spinner jusqu'à ce que je trouve l'élément correspondant à l'ID que j'avais déjà. Ensuite, affectez le numéro de ligne du curseur à la position sélectionnée du spinner. Ce serait bien d'avoir une fonction similaire pour passer l'id de la valeur que vous souhaitez sélectionner dans le spinner lors du remplissage des détails sur un formulaire contenant des résultats de spinner enregistrés.
la source
Comme certaines des réponses précédentes sont très bonnes, je veux juste m'assurer qu'aucun d'entre vous ne tombe dans ce problème.
Si vous définissez les valeurs sur
ArrayList
usingString.format
, vous DEVEZ obtenir la position de la valeur en utilisant la même structure de chaîneString.format
.Un exemple:
Vous devez obtenir la position de valeur requise comme ceci:
Sinon, vous obtiendrez l'
-1
article non trouvé!J'ai utilisé à
Locale.getDefault()
cause de la langue arabe .J'espère que cela vous sera utile.
la source
Voici ma solution, espérons-le, complète. J'ai l'énumération suivante:
utilisé dans la classe suivante
Code pour définir le spinner par membre enum HTTPMethod:
Où
R.id.spinnerHttpmethod
est défini dans un fichier de mise en page etandroid.R.layout.simple_spinner_item
fourni par android-studio.la source
la source
très simple il suffit d'utiliser
getSelectedItem();
par exemple :
la méthode ci-dessus renvoie une valeur de chaîne
ci-dessus
R.array.admin_type
est un fichier de ressources de chaîne dans les valeursil suffit de créer un fichier .xml dans les valeurs >> chaînes
la source
Supposons que vous ayez besoin de remplir le spinner du tableau de chaînes de la ressource et que vous souhaitiez conserver la valeur sélectionnée sur le serveur. Donc, c'est une façon de définir la valeur sélectionnée du serveur dans le spinner.
J'espère que ça aide! PS le code est en Kotlin!
la source
Puisque j'avais besoin de quelque chose, qui fonctionne également avec la localisation , j'ai trouvé ces deux méthodes:
Comme vous pouvez le voir, je suis également tombé sur une complexité supplémentaire de la sensibilité à la casse entre les tableaux.xml et ceux que
value
je compare. Si vous ne l'avez pas, la méthode ci-dessus peut être simplifiée en quelque chose comme:return arrayValues.indexOf(value);
Méthode d'assistance statique
la source
vous devez passer votre adaptateur personnalisé avec une position comme REPEAT [position]. et cela fonctionne correctement.
la source