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 :

Rechargement de page


Sujet :

Android

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 523
    Points : 147
    Points
    147
    Par défaut Rechargement de page
    hello!

    grâce à vous tous j'ai pas mal avancé maintenant!

    mais un truc me turlupine toujours au retour sur mainActivity...
    (pas facile à expliquer, je vais essayer de faire au mieux!)

    mainActivity -> activityFille -> bouton "back" -> retour mainActivity

    ma mainActivity initialise 2 spinners et selon le choix fait dans ces spinners, on débranche sur activityFille avec la ligne du spinner.

    au retour, j'aimerais que les spinners soient réinitialisés, sans mémoriser le choix précédent... ce qui est bien le cas sur ma GT 10.1 (page rechargée de A à Z!)... mais pas avec la NEXUS7 & les emulator 2.3/3.0/4.0 & 4.1 qui gardent mainActivity en l'état!
    -> càd que les spinners affichent les lignes sélectionnées avant de passer à activityFille...
    -> ce qui ne serait pas gênant en soit, mais problème, on ne peut re-sélectionner la même ligne!

    ex:
    * main (choix spinner 1 = TOTO) -> fille -> back main
    * spinner1 = toujours TOTO
    * mais si je ne peux pas resélectionner TOTO pour débrancher sur fille
    * je suis obligé de sélectionner d'abord spinner1=TATA, back sur main et re-select TOTO... pas vraiment pratique quoi!


    alors:
    1.) déjà je ne comprends pas cette différence de comportement(?)
    (mais je suppose que le comportement normal est de conserver l'état, et que c'est la GT qui fonctionne différemment?)

    2.) mais surtout je n'arrive pas à faire en sorte que ma main se recharge complètement (comme au run de l'appli!)... même avec un restore de bundle en début de onCreate()!

    alors que pourtant, en faisant une rotation de l'écran, toute la main est réinitialisée, dont les spinners!

    donc quelle est la différence?

    là, j'avoue sécher...

    merci.

  2. #2
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    A toi de mettre à jour (notifyDataChanged) le contenu de tes spinners dans la méthode onResume()

    Pour ce qui est du changement d'orientation, les vues de l'activités sont entièrement détruites puis recréées. Ce comportement est normal.
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  3. #3
    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
    Tout dépend de ce que fait Android....

    Disons qu'on a deux activité A & B et que B overlap entierement A (on ne voit plus A à travers)... on peut avoir deux "types" de comportements:

    Cas 'simple':
    A.onCreate()
    A.onStart()
    A.onResume()
    ... l'utilisateur est sur A
    A.onClick()
    A.onPause() <= A n'est plus le "focus"
    B.onCreate()
    A.onStop() <= on ne voit plus A (les animations s'arrêtent par exemple)
    B.onStart()
    B.onResume()
    ... l'utilisateur est sur B
    B.onPause()
    B.onStop()
    B.onDestroy()
    A.onRestart()
    A.onStart()
    A.onResume()
    ....l'utilisateur est à nouveau sur A



    Cas 'low-memory'
    A.onCreate()
    A.onStart()
    A.onResume()
    ... l'utilisateur est sur A
    A.onClick()
    A.onPause() <= A n'est plus le "focus"
    B.onCreate()
    A.onStop() <= on ne voit plus A (les animations s'arrêtent par exemple)
    ... ici android a besoin de mémoire...
    A.onSaveInstanceState()
    A.onDestroy()
    n.b. .. L'instance de A est alors *détruite* toutes les données stockées dans l'instance (membres) seront à recréer
    B.onStart()
    B.onResume()
    ... l'utilisateur est sur B
    B.onPause()
    A.onCreate() <= avec le bundle obtenu lors de onSaveInstanceState()
    B.onStop()
    B.onDestroy()
    A.onStart()
    A.onResume()
    ....l'utilisateur est à nouveau sur A
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 523
    Points : 147
    Points
    147
    Par défaut
    encore une embrouille donc... moi qui pensais toucher au but, je me retrouve encore perdu...

    bon je vais me pencher sur la question, mais en attendant, 2 questions (connes?) me viennent là, tout de suite:

    1.) il faut donc implémenter les 2 cas, simple ET low memory?
    -> d'ailleurs n'est-il pas paradoxale qu'un device physique (ma GT ici) manque de mémoire et se retrouve donc dans le cas "low memory"
    -> alors que mes émulateurs (& la nexus) déroulent le cas "simple"?

    2.) peut-on simuler une rotation ou un low memory, pour ne gérer que ce dernier cas, et tout recréer à chaque fois, plus + simple (trop??) finalement?

    et pour répondre à une de tes interrogation: mes activités sont toutes en plein écran, elles s'overlapent donc systématiquement.

  5. #5
    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
    Ben non... il faut juste implémenter les bonnes choses aux bons endroits....

    Si a chaque fois que l'activité A revient à l'avant-plan il faut "recharger" une liste... le code doit alors être dans onResume()... si ce n'est pas la cas, dans le onCreate().

    Il y a pas grand chose à implémenter au bout du compte: onCreate/onDestroy (gain/perte du 'context') et onResume/onPause (gain/perte du 'focus')....

    Éventuellement onSaveInstanceState dans quelques cas complexes (quand on veut conserver un état après le onDestroy)...

    Et onStart/onStop (gain/perte de la visibilité) pour les cas d'activités animées (il ne sert à rien de décoder une vidéo si on ne la voit plus par exemple).

    Et bien faire les passages de paramètres entre activités par les Intents....


    Quant à la mémoire, il ne faut surtout pas confondre mémoire physique (celle du device) et mémoire dalvik (celle de java ou tourne l'appli)... la dernière est très limitée (entre 16Mo et 64Mo selon les versions d'android !!!)
    A noter qu'il est possible dans l'émulateur de spécifier cette dernière (heap).
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  6. #6
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 523
    Points : 147
    Points
    147
    Par défaut
    Je viens de me refaire les cycles ce matin oui.

    Par contre, moi d'instinct, dans mon cas, j'aurais plutôt implémenté onRestart() (uniquement lancé au retour sur 1 Activity) que onResume() (lancé systématiquement à chaque fois!)!

    Je m'espique:

    onCreate()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ...
    initSpinner1();
    initSpinner2();
    ...
    onRestart()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    initSpinner1();
    initSpinner2();
    Avantage pour moi: ne pas avoir à déplacer dans le onResume() des imbrications complexes de tests de pre-launch.

    Peut être pas 100% Andro-philosophique, mais fonctionnel malgré tout je pense... d'un point de vue logique en tout cas.

    PS: merci pour la précision "mémoire", très important en effet!

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

Discussions similaires

  1. [C#] Recharger une page sur le clic d'une ListBox
    Par pc152 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 14/02/2005, 12h48
  2. Réponses: 2
    Dernier message: 17/01/2005, 14h46
  3. Changer la police avec un select, sans recharger la page
    Par Netoman dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 30/12/2004, 18h07
  4. [JSP] [STRUTS] [Javascript] Rechargement de page
    Par babylone7 dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 28/07/2004, 13h21
  5. [web] rechargement de page html
    Par GMI3 dans le forum Web
    Réponses: 2
    Dernier message: 22/09/2003, 09h49

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