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 :

ViewGroup.onLayout provoque une boucle infinie


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 120
    Par défaut ViewGroup.onLayout provoque une boucle infinie
    Bonjour

    Je désire superposer et décaler deux layouts dans un viewGroup. En me basant sur la doc
    http://developer.android.com/referen...ViewGroup.html , j'ai fait l'implémentation basique suivante :

    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
     
    public class ItemView extends ViewGroup {
        View delayed;
        View information;
     
        public ItemView(Context context) {
            super(context);
            LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            delayed = layoutInflater.inflate(R.layout.delayed_layout, this, true);
            information = layoutInflater.inflate(R.layout.information_layout, this, true);
        }
     
        /**
         * Any layout manager that doesn't scroll will want this.
         */
        @Override
        public boolean shouldDelayChildPressedState() {
            return false;
        }
     
        @Override
        protected void onLayout(boolean changed, int l, int t, int r, int b) {
            if (changed) {
                delayed.layout(l, t, r, b);
                information.layout(l + 10, t, r, b);
            }
        }
    }
    delayed_layout.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:orientation="vertical"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent"
                  android:weightSum="1">
     
        <Button
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="cancel"
            android:id="@+id/button"/>
    </LinearLayout>
    information_layout.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:orientation="vertical"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent">
     
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="This is the information layout"
            android:id="@+id/textView"/>
    </LinearLayout>

    Ce code provoque une boucle infinie sur onLayout et je ne vois pas bien pourquoi.
    D'autre part, si je ne mets qu'un seul layout, je n'ai pas de boucle infinie mais rien ne s'affiche.

    J'ai par ailleurs réalisée un version qui implémente onMeasure avec des valeurs constantes, mais sans aucune différence au
    niveau du résultat.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            setMeasuredDimension(200, 200);
        }
    Pourquoi ce comportement ?
    Que dois-je changer ?

    Merci
    Henri

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 120
    Par défaut
    Progrès : en utilisant getChildAt() plutôt que directement les variables delayed et information, il n'y a plus de boucle infinie.

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

Discussions similaires

  1. Réponses: 18
    Dernier message: 26/04/2006, 11h39
  2. Une boucle infinie crontab
    Par tsing dans le forum Administration système
    Réponses: 10
    Dernier message: 10/04/2006, 10h28
  3. Select qui fais une boucle infinie
    Par MaitrePylos dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 28/03/2006, 17h29
  4. Réponses: 10
    Dernier message: 24/12/2005, 15h35
  5. [FTP] comment corriger une boucle infinie ?
    Par sofybj dans le forum Langage
    Réponses: 8
    Dernier message: 08/11/2005, 14h49

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