OnItemSelectedListener appelé rotation de l'écran
-
26-09-2019 - |
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.
La solution
. 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) { }
});