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

Android Discussion :

onBack boucle infinie entre 2 Activity


Sujet :

Android

  1. #1
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2007
    Messages
    697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 697
    Points : 1 241
    Points
    1 241
    Par défaut onBack boucle infinie entre 2 Activity
    Bonjour, j'ai une Activity principale qui étends TabActivity et qui quand on clique sur le bouton menu affiche une PreferenceActivity..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public boolean onPrepareOptionsMenu(Menu menu) {
            startActivity(new Intent(this, MyPreferenceActivity.class));
            return false;
    }
    Sur Motorola RAZR HD quand on lance l'application, affiche le PreferenceActivity via la touche menu et qu'on fait back plusieurs fois (une fois pour revenir à l'écran principale et une fois pour quitter l'application), on a une boucle infini entre les 2 écrans.

    Le Motorola RAZR HD possède des boutons tactiles. Cela peut-il avoir un impact ? Sinon qu'est-ce qui pourrait causer ce comportement ?

    J'ai bien essayé de rajouter finish() dans le onBack() de la PreferenceActivity mais ça ne change pas grand chose...

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Points : 968
    Points
    968
    Par défaut
    Attention, le callback onPrepareOptionsMenu ne sert pas à cela : Lien
    On y lit :
    Prepare the Screen's standard options menu to be displayed. This is called right before the menu is shown, every time it is shown. You can use this method to efficiently enable/disable items or otherwise dynamically modify the contents.
    C'est à dire que cette méthode peut être appelée plus ou moins souvent, dès lors que le système a besoin d'actualiser le layout du menu.

    Dans ton cas il se peut que, dès que tu quittes PreferencesActivity, le système fait appel à onPrepareOptionsMenu pour regénérer le menu : d'où la boucle.

    De plus, il faut bien comprendre que l'utilisation de la touche "menu" est à déconseiller : de nombreux smartphones n'ont plus cette touche (qu'elle soit intégrée à la SystemBar ou non, comme pour le HTC One).

  3. #3
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2007
    Messages
    697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 697
    Points : 1 241
    Points
    1 241
    Par défaut
    Merci pour ta réponse mais mon client insiste pour avoir ce comportement (et accessoirement un design iOS). Il y a moyen de le faire proprement ?

    J'ai trouvé un code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
        @Override
        public boolean onPrepareOptionsMenu(Menu menu) {
            boolean isMenuEvent = menu.isShortcutKey(KeyEvent.KEYCODE_MENU, makeKeyEvent(KeyEvent.KEYCODE_MENU, 0));
            if (isMenuEvent) {
                startActivity(new Intent(this, MyPreferenceActivity.class));
                return false;
            }
            return true;
        }
     
        private KeyEvent makeKeyEvent(int keyCode, int metaState) {
            return new KeyEvent(0L, 0L, KeyEvent.ACTION_DOWN, keyCode, 0, metaState);
        }
    Est-ce que ça pourrait résoudre mon problème ?
    Mon client ne veux vraiment pas passer par un clique supplémentaire...

  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
    Heu... il faut comprendre un truc quand même:

    Le bouton "menu" en disparaissant, laisse sa place à l'ActionBar... qui va appeler la fonction pour savoir si il faut un menu ou non...
    Si la fonction ne fait rien, il n'y aura même pas de bouton de menu !
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  5. #5
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2007
    Messages
    697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 697
    Points : 1 241
    Points
    1 241
    Par défaut
    Je n'utilise pas l'actionBar. C'est un code que je reprends basé sur les API 2.X. J'ai déjà eu un problème de bouton menu absent sur Motorola XOOM. Si je me rappel bien, j'avais résolu le problème en buildant avec l'API 2.3.
    Je ne sais pas si ça marche dans tous les cas

    Sinon je peux peut-être convaincre mon client d'ajouter un bouton paramètre à l'interface.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Points : 968
    Points
    968
    Par défaut
    Comme l'a précisé Nicroman, s'il n'y a rien dans ton menu, les appareils ne disposant pas de boutons physique (voué à disparaître) n'auront aucun moyen d'accéder à cette Activity "cachée"...

  7. #7
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2007
    Messages
    697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 697
    Points : 1 241
    Points
    1 241
    Par défaut
    Citation Envoyé par atha2 Voir le message
    J'ai déjà eu un problème de bouton menu absent sur Motorola XOOM. Si je me rappel bien, j'avais résolu le problème en buildant avec l'API 2.3.
    Ce n'est pas une solution potentielle ?

    Sinon j'ai une Galaxy Tab 2. Le bouton menu n'apparait pas tout le temps. Si j'arrive à tricker pour faire fonctionner le bouton menu dessus, ça pourrait marcher sur tous les téléphones ?
    Encore une fois mon application ne possède pas d'action bar.

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Points : 968
    Points
    968
    Par défaut
    Builder avec des versions antérieures n'est jamais une très bonne idée (sauf si vous ne comptez pas sur les devices avec une version supérieur)...

    Le fait de builder en dessous de la version 14 (je crois) va en effet faire apparaître un "overflow item" dans la "Navigation Bar" des terminaux n'ayant pas de boutons physique, comme pour le Nexus 4.
    Mais pas pour tous, en effet, l'exemple des HTC va certainement te convaincre (ou convaincre ton client).
    Les derniers HTC n'ont pas de bouton physique, ni de bouton menu, ni de bouton intégré à l'écran. Ce sont des bouton sensitifs. De ce fait, le menu va s'afficher ainsi :


    Je te conseille aussi de lire l'article en rapport)

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

Discussions similaires

  1. [Boucle Infinie] pour un menu
    Par NhyMbuS dans le forum C++
    Réponses: 5
    Dernier message: 20/07/2005, 09h14
  2. symptome de la boucle infinie dans une requete
    Par ouam81 dans le forum Langage SQL
    Réponses: 8
    Dernier message: 27/05/2005, 12h10
  3. Réponses: 15
    Dernier message: 24/05/2005, 08h34
  4. [Socket] Pb de boucle infinie
    Par Myogtha dans le forum Entrée/Sortie
    Réponses: 12
    Dernier message: 10/06/2004, 14h10
  5. [C#] Comment eviter les boucles infinies ?
    Par Thomas Lebrun dans le forum C#
    Réponses: 12
    Dernier message: 09/06/2004, 00h04

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