IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants graphiques Android Discussion :

Aide Item Spinner et rotation [Débutant(e)]


Sujet :

Composants graphiques Android

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 254
    Points : 55
    Points
    55
    Par défaut Aide Item Spinner et rotation
    Bonjour,
    dans mon application comportant 2 Spinner (Spinner1 et 2), en fonction du choix fait dans le 1er spinner la liste des items change dans Spinner2.
    Mon problème est qu'a chaque rotation d’écran l’évènement "setOnItemSelectedListener" est lancé.
    Comment éviter ça?
    Merci pour votre aide !!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Spinner1.setOnItemSelectedListener(new OnItemSelectedListener()
    		{
    public void onItemSelected(AdapterView<?> arg0, View Mt,int arg2, long arg3)
    {
     
    try
    {
    RempissageDuSpinner2();
    catch (Exception e)
    {
    Toast toast = Toast.makeText(getApplicationContext(),"Erreur", 1500);
    toast.show();
    Return;
    }
    }

  2. #2
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Normal, lors de la rotation de l'écran, par défaut, l'activité est détruite, puis recrée (dans la bonne orientation), et le systeme réaffecte leur état à toutes les views (donc va appeler setSelectedItem sur les spinners).

    Il y a plusieurs choix:
    1. Ce n'est pas trop génant, on laisse le comportement par défaut.
    2. C'est lent, il faut alors stocker, quand le système demande à l'activité de sauvegarder son état, la selection du spinner1. On relit cette valeur au démarrage de l'activité... Le code du onItemSelectedChange ne fera quelque chose que si la valeur a changé (et bien sur on la change).
    3. On gère soit même la rotation (destruction/création des views, ou animation vers le nouveau layout, etc.)
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 254
    Points : 55
    Points
    55
    Par défaut
    Bonjour nicroman, merci pour cette réponse rapide,


    Citation Envoyé par nicroman Voir le message

    2. C'est lent, il faut alors stocker, quand le système demande à l'activité de sauvegarder son état, la selection du spinner1. On relit cette valeur au démarrage de l'activité... Le code du onItemSelectedChange ne fera quelque chose que si la valeur a changé (et bien sur on la change).
    Tu parles par exemple d'une variable globale permettant d'indexer le spinner lors de la création de la views? ou une autre méthode peut être?

    Citation Envoyé par nicroman Voir le message
    3. On gère soit même la rotation (destruction/création des views, ou animation vers le nouveau layout, etc.)
    Je ne sais pas faire ce genre de chose, aurais tu un lien vers un exemple simple de préférence,
    merci pour ton aide

  4. #4
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Tu parles par exemple d'une variable globale permettant d'indexer le spinner lors de la création de la views? ou une autre méthode peut être?
    Même pas.... Une variable locale à l'activité...
    Ajouter dans le bundle (lors du "onSaveInstanceState" je crois de mémoire), la valeur de cette variable (peut être nulle).
    Relire la valeur dans le "onCreate" (le bundle reçu en paramètre, attention il peut être null aussi).
    Ensuite dans le code du "onSpinner1ItemSelected()" vérifier que la valeur a changé, si non, retour direct... si oui, on stocke la nouvelle valeur dans la variable locale, et on update le reste comme avant.


    Pour la gestion de la rotation soit-même, c'est effectivement plus compliqué...
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 254
    Points : 55
    Points
    55
    Par défaut
    Citation Envoyé par nicroman Voir le message
    Ajouter dans le bundle (lors du "onSaveInstanceState" je crois de mémoire), la valeur de cette variable (peut être nulle).
    Relire la valeur dans le "onCreate" (le bundle reçu en paramètre, attention il peut être null aussi).
    Arf ça marche pas, la valeur de la variable (IndexSpinner) reste à -1 dans le OnCreate

    Ma variable:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class TestCombo extends Activity
    {
    public int IndexSpinner;
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
    IndexSpinner= Spinner1.getSelectedItemPosition();
    L'evenement selectedItem:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    spinner1.setOnItemSelectedListener(new OnItemSelectedListener()
    {
    public void onItemSelected(AdapterView<?> arg0, View Moteur,int PositionIndex, long arg3)
    {
    if(PositionIndex!=IndexSpinner)
    {
    try
    {
    RempissageDuSpinner2();
    IndexSpinner= PositionIndex;
    ......

  6. #6
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Bon... alors..

    En Java, habituellement seuls les types (classes, enum, interfaces) commencent par une majuscule.

    Ce que je te disais c'est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    public class TestCombo extends Activity
    {
        public int indexSpinner = -1;
     
        @Override
        public void onCreate(Bundle savedInstanceState)
        {
             if (savedInstanceState != null) 
                 this.indexSpinner = savedInstanceState.getInt("indexSpinner",-1);
             super.onCreate(savedInstanceState);
             setContentView(...);
     
             spinner1.setOnItemSelectedListener(new OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> adapter, View v,int position, long id)
                {
                    TestCombo.this.onSpinner1Change(position);
                }
             });
         }
     
         public void onSpinner1Change(int position)
         {
             if (position != this.indexSpinner) {
                 this.indexSpinner = position;
                 ... update spinner 2
             }
         }
     
         @Override
         public void onSaveInstanceState(Bundle bundle)
         {
             super.onSaveInstanceState(bundle);
             if (this.indexSpinner != -1)
                 bundle.put("indexSpinner",this.indexSpinner);
     
         }
     
    }
    Quand l'instance de l'activity est sur le point d'être perdue (par exemple sur une rotation), onSaveInstanceState est appelé par le système, et l'index du spinner stocké dans le bundle...
    Quand la nouvelle instance est crée, onCreate est appelé avec le même bundle (utilisé au passage pour réinitialiser les views dans leur état précédant), on y récupère l'index sauvegardé précédemment.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [débutant] comment récupérer l'item dans un Spinner
    Par shamri dans le forum Composants graphiques
    Réponses: 2
    Dernier message: 09/06/2010, 17h11
  2. Parametrer un item à l'aide de 2 liste déroulante.
    Par thierryakaguy dans le forum IHM
    Réponses: 4
    Dernier message: 31/07/2009, 16h21
  3. Aide : Rotation d'une image en GTK
    Par majed_la7 dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 06/11/2007, 11h29
  4. Aide en rotation d'image numerique
    Par hayate12 dans le forum Traitement d'images
    Réponses: 14
    Dernier message: 29/03/2007, 17h58
  5. supprimer item d'une listbox a l'aide d'un popup menu
    Par avogadro dans le forum Composants VCL
    Réponses: 14
    Dernier message: 24/04/2006, 22h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo