Question

Quand je change l'orientation de mon écran dans Android, un OnItemSelectedListener d'un Spinner est appelé.

Il est non seulement l'émulateur, il arrive aussi sur un téléphone physique.

Comment puis-je arrêter cela se produise?

Vive.

Était-ce utile?

La solution

Spinners sont toujours sélectionnés

. Votre OnItemSelectedListener sera appelée quand il y a un changement dans l'état de la Spinner, y compris lorsque le Spinner est d'abord mis en place. Un changement d'orientation normale entraînera votre activité détruite et recréée. Donc, si votre OnItemSelectedListener est appelée lorsque votre activité est sa première apparition à l'écran, il sera appelé à nouveau lorsque l'orientation est modifiée.

  

Comment puis-je arrêter cela se produise?

Vous pourriez être en mesure de jouer avec le moment où vous appelez setOnItemSelectedListener() par rapport à setAdapter(), pour voir si elle aide.

Autres conseils

Vous obtiendrez également un deuxième appel si le selectedItemPosition de la fileuse n'est pas nul lorsque l'écran est mis en rotation, comme Android définit la position à ce qu'il était avant la rotation. Utilisez onSaveInstanceState pour compter le nombre de filatures dans aucune position zéro et utiliser ce compte pour que le code OnItemSelected retourne juste jusqu'à ce que le compte a été décrémenté à zéro.

Vous devez également être très prudent avec les filateurs qui peuvent avoir une visibilité de View.GONE. Je vais ajouter un peu plus de texte ici quand je peux trouver le temps de décrire exactement comment gérer ces derniers.

Le OnItemSelectedListener est appelée avant la fileuse contient son adaptateur si vous avez besoin de valider que la vue est pas la méthode à l'intérieur de OnItemSelected null, comme ça:

spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
  @Override public void onItemSelected (AdapterView<?> parent, View view, int position, long id){
    if(view != null) { // <- here is the validation
      // Your code to do something with the selected item
    }
  }
  @Override public void onNothingSelected(AdapterView<?> parent) { }
});
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top