Android: setSelection ayant aucun effet sur le Spinner
Je vais avoir un problème avec setSelection sur un Spinner. J'ai défini la valeur d'être pré-sélectionné lorsque la toupie est indiqué dans le code, mais il n'a pas d'effet et la première option de la liste est toujours sélectionné. Le code ressemble à ceci:
LayoutInflater li = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final View dialogView = li.inflate(R.layout.edit_event, null);
...
ArrayList<String> routes = new ArrayList<String>();
//routes filled with values at runtime
...
ArrayAdapter<String> aa = new ArrayAdapter<String>(GOFdroid.this, android.R.layout.simple_spinner_item, routes);
aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
Spinner destSpinner = (Spinner) dialogView.findViewById(R.id.edit_event_destination);
String dest = events.get(pos).getDestination();
int routesPos = routes.indexOf(dest);
Log.d(TAG, "Dest: " + dest + ", pos: " + routesPos);
destSpinner.setSelection(routesPos);
destSpinner.setAdapter(aa);
Le code fonctionne comme prévu, sauf pour les setSelection-partie, et je ne peux pas comprendre pourquoi.
XML-mise en page de la spinner ressemble à ça (pas toute la mise en page, seul le spinner partie):
//DESTINATION
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Destination:" />
<Spinner
android:id="@+id/edit_event_destination"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:prompt="@string/choose_dest"
android:layout_marginBottom="10dip"
android:text="" />
De l'aide est très apprécié!
Linus
Vous devez vous connecter pour publier un commentaire.
Essayez de déplacer l'appel à
setSelection()
après l'appel àsetAdapter()
.J'ai eu le même problème. Dans mon cas,
setAdaper
etsetSelection
étaient dans le bon ordre! Formulaire signéonCreate
travaillé, mais lorsqu'il est exécuté à partir deonResume
a eu aucun effet.La solution est d'appeler
setSelection(my_pos, true)
. Remarquez le second paramètre.Vous pouvez essayer de
ce post sera le praticable action à exécuter dès que la vue est créée
Dans mon cas, aucune réponse n'a fonctionné, j'ai donc mis en file d'attente le setSelection par l'intermédiaire d'un Gestionnaire de
Cela peut causer des problèmes lors de l'exécution sur les machines lentes, mais je travaille pour un dispositif spécifique, donc c'est ok pour utiliser ce hack
N'oubliez pas, si vous appelez à l'animer, le programme d'installation de mise en page params alors 🙂
Exemple:
manuellement sertie les rembourrages de spinner doit être réinitialisée manuellement
J'ai eu le même problème avec un compteur à l'intérieur d'un
fragment : setSelection
fonctionne correctement pendant laonCreate
lors du premier démarrage de l'activité, mais pas quand je le faire pivoter l'écran. Je l'ai résolu en appelantsetSelection
dans leonViewStateRestored
méthode du fragment au lieu de l'appeler à l'intérieur de laonCreate
méthode. Je ne suis pas sûr mais je pense que vous ne pouvez pas utilisersetSelection
jusqu'à ce que le point de vue est complètement chargé, même si vous pouvezfindViewById
il.onCreate
qui n'est pas le premier, l'état d'affichage est ensuite restaurée par le système. UnsetSelection
dans il sera rétabli par la restauration de l'état du mécanisme. La solution consiste à exécutersetSelection
après la restauration de l'état se produitSpinner mySpinner = (Spinner)getView().findViewById(R.id.mySpinner);
dans leonViewStateRestored()
méthode, elle renvoie la valeur null (et il ne renvoie pas null quand je l'appelle il enonCreate()
).Spinner.setSelection()
ne fonctionnent pas si vous l'appelez avantSpinner.setAdapter()
Essayez d'appeler
setSelection()
après l'appel à setAdapter().Raison Derrière cette : lorsque vous appelez
Spinner.Selection()
avant de mettre un adaptateur pour il signifie simplement que vous essayez de définir spinner à l'index personnalisé par setSelection() lorsqu'il ne contient pas de données, ou nous pouvons dire c'est spinner a max item =0.donc
setSelection(1)
à-dire l'établissement de l'indice 1 pour spinner qui a max item =0; Bien spinner lui-même gère ce outofBoundIndex ainsi, votre application ne se bloque.appel à
SetSelection()
devrait l'être après setAdapter() seulementAussi, si vous avez un
Spinner.SetOnItemSelectedListener()
et vous avez le problème queonItemSelected(AdapterView<?> parent, View view, int position, long id)
est tiggered avec position valeur=0 lors de la charge d'activité, puis vous devez utiliser ce modèle.utiliser cette
Aucune des réponses précédentes a fonctionné pour moi. Ce n'travail, cependant, a été la création de la variable d'instance
mSpinner
dans leonCreateView()
méthode de mon fragment (ou, dans leonCreate()
méthode de votre activité), puis de le faire dans mononLoadFinished()
méthode...essayer cela, il a travaillé pour moi:
Parfois, nous ne pouvons pas définir les auditeurs à cause de la toupie peut être réglé à une certaine valeur, et désactivé selon l'exigence.
Cela peut conduire à setSelection() ne sélectionnant pas de valeur, car il a besoin d'un auditeur.
Assurez-vous que la touche de navigation du setOnItemSelectedListener() est définie sur un écouteur personnalisé comme ci-dessous.
Même si spinner est désactivé, nous devons définir un écouteur comme ci-dessous, de sorte que setSelection() la méthode fonctionne.