Définir l'élément sélectionné de spinner de façon programmatique
je travaille sur un projet android et j'utilise un spinner qui utilise un adaptateur réseau qui est alimenté à partir de la base de données.
Je n'arrive pas à trouver comment je peux programmer l'élément sélectionné à partir de la liste. Par exemple, si, dans le spinner j'ai les articles suivants:
- catégorie 1
- Catégorie 2
- Catégorie 3
Comment pourrais-je par programmation de Catégorie 2 de l'élément sélectionné lorsque l'écran est créé. Je pensais que ça pourrait être similaire à C# I Spinner.SelectedText = "Catégorie 2" mais il ne semble pas y avoir de méthode similaire à celle-ci pour Android.
17 réponses
utiliser le suivant:
spinnerObject.setSelection(INDEX_OF_CATEGORY2)
.
Aucune de ces réponses m'a donné la solution, seulement travaillé avec ceci:
mySpinner.post(new Runnable() {
@Override
public void run() {
mySpinner.setSelection(position);
}
});
public static void selectSpinnerItemByValue(Spinner spnr, long value) {
SimpleCursorAdapter adapter = (SimpleCursorAdapter) spnr.getAdapter();
for (int position = 0; position < adapter.getCount(); position++) {
if(adapter.getItemId(position) == value) {
spnr.setSelection(position);
return;
}
}
}
vous pouvez utiliser le ci-dessus comme:
selectSpinnerItemByValue(spinnerObject, desiredValue);
& bien sûr vous pouvez également sélectionner par index directement comme
spinnerObject.setSelection(index);
quelques explications (au moins pour les Fragments - jamais essayé avec L'activité pure). J'espère que ça aidera Quelqu'un à mieux comprendre Android.
La réponse la plus populaire par Arun George est correcte mais ne fonctionne pas dans certains cas.
La réponse par Marco HC utilise l'Exécutable qui est un dernier recours en raison de l'augmentation de charge du PROCESSEUR.
la réponse est - vous devez simplement choisir correct endroit pour appeler à setSelection() , par exemple œuvres pour moi:
@Override
public void onResume() {
super.onResume();
yourSpinner.setSelection(pos);
}
Mais il ne fonctionne pas dans onCreateView() . Je soupçonne que c'est la raison de l'intérêt à ce sujet.
Le secret est qu'avec Android vous ne pouvez pas faire tout ce que vous voulez dans n'importe quelle méthode - oops:( - components Mai tout simplement pas être prêt. Comme autre exemple - vous ne pouvez pas faire défiler ScrollView ni dans onCreateView() ni dans onResume () (voir la réponse ici )
pourquoi n'utilisez-vous pas vos valeurs de la base de données et de les stocker sur un ArrayList et puis juste utiliser:
yourSpinner.setSelection(yourArrayList.indexOf("Category 1"));
pour trouver une valeur et la sélectionner:
private void selectValue(Spinner spinner, Object value) {
for (int i = 0; i < spinner.getCount(); i++) {
if (spinner.getItemAtPosition(i).equals(value)) {
spinner.setSelection(i);
break;
}
}
}
vous pouvez faire une méthode générique pour ce genre de travail comme je le fais dans mon UtilityClass qui est
public void SetSpinnerSelection(Spinner spinner,String[] array,String text) {
for(int i=0;i<array.length;i++) {
if(array[i].equals(text)) {
spinner.setSelection(i);
}
}
}
j'ai un SimpleCursorAdapter donc je dois dupliquer les données pour utiliser la respiration dans ce post. Donc, je vous recommande d'essayer de cette façon:
for (int i = 0; i < spinnerRegion.getAdapter().getCount(); i++) {
if (spinnerRegion.getItemIdAtPosition(i) == Integer
.valueOf(signal.getInt(signal
.getColumnIndexOrThrow("id_region")))) {
spinnerRegion.setSelection(i);
break;
}
}
je pense que c'est un vrai chemin
c'est du travail pour moi.
spinner.setSelection(spinner_adapter.getPosition(selected_value)+1);
la solution optimale est:
public String[] items= new String[]{"item1","item2","item3"};
// here you can use array or list
ArrayAdapter adapter= new ArrayAdapter(Your_Context, R.layout.support_simple_spinner_dropdown_item, items);
final Spinner itemsSpinner= (Spinner) findViewById(R.id.itemSpinner);
itemsSpinner.setAdapter(adapter);
pour obtenir la position de l'article ajouter automatiquement la déclaration suivante
itemsSpinner.setSelection(itemsSpinner.getPosition("item2"));
si vous avez une liste de contacts vous pouvez aller pour cela:
((Spinner) view.findViewById(R.id.mobile)).setSelection(spinnerContactPersonDesignationAdapter.getPosition(schoolContact.get(i).getCONT_DESIGNATION()));
je sais qu'il est déjà répondu, mais code simple pour sélectionner un élément, très simple:
spGenre.setSelection( ( (ArrayAdapter) spGenre.getAdapter()).getPosition(client.getGenre()) );
for (int x = 0; x < spRaca.getAdapter().getCount(); x++) {
if (spRaca.getItemIdAtPosition(x) == reprodutor.getId()) {
spRaca.setSelection(x);
break;
}
}
dans mon cas, ce code a sauvé ma journée:
public static void selectSpinnerItemByValue(Spinner spnr, long value) {
SpinnerAdapter adapter = spnr.getAdapter();
for (int position = 0; position < adapter.getCount(); position++) {
if(adapter.getItemId(position) == value) {
spnr.setSelection(position);
return;
}
}
}
cela est indiqué dans les commentaires ailleurs sur cette page mais a jugé utile de le tirer dans une réponse:
en utilisant un adaptateur, j'ai trouvé que le spinnerObject.setSelection(INDEX_OF_CATEGORY2)
doit se produire après l'appel setAdapter
; sinon, le premier élément est toujours la sélection initiale.
// spinner setup...
spinnerObject.setAdapter(myAdapter);
spinnerObject.setSelection(INDEX_OF_CATEGORY2);
ceci est confirmé par l'examen du code AbsSpinner pour setAdapter
.
cela a fonctionné pour moi:
@Override
protected void onStart() {
super.onStart();
mySpinner.setSelection(position);
}
c'est similaire à la solution de @sberezin mais appelant setSelection() dans onStart().