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.

293
demandé sur Sathya 2012-06-17 19:39:18

17 réponses

utiliser le suivant: spinnerObject.setSelection(INDEX_OF_CATEGORY2) .

604
répondu Arun George 2012-06-17 15:41:29

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);
    }
});
63
répondu Marco HC 2018-02-26 04:30:39
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);
29
répondu Yaqub Ahmad 2016-01-24 22:13:03

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 )

24
répondu sberezin 2017-05-23 11:54:59

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"));
10
répondu RicardoSousaDev 2014-08-08 14:30:19

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;
        }
    }
}
9
répondu Ferran Maylinch 2016-01-24 22:13:13

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);
        }
    }
}
6
répondu ZygoteInit 2016-01-24 22:13:27

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

3
répondu pazfernando 2013-06-25 19:18:05

c'est du travail pour moi.

 spinner.setSelection(spinner_adapter.getPosition(selected_value)+1);
2
répondu Arpit Patel 2016-07-21 10:01:07

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 voulez montrer.

2
répondu 2017-04-10 19:41:35

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"));
2
répondu Naham Al-Zuhairi 2018-03-29 18:57:24

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()));
1
répondu Maddy 2014-07-30 15:10:26

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()) );
1
répondu Dante 2016-03-22 22:00:51
  for (int x = 0; x < spRaca.getAdapter().getCount(); x++) {
            if (spRaca.getItemIdAtPosition(x) == reprodutor.getId()) {
                spRaca.setSelection(x);
                break;
            }
        }
1
répondu Julio Cezar Riffel 2016-04-28 17:01:07

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;
        }
    }
}
1
répondu Juan Pablo 2016-11-22 16:23:05

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 .

0
répondu Andy 2018-07-18 15:56:34

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().

-1
répondu JosinMC 2017-08-31 17:08:28