Autore Topic: problema onLayout su diverse versioni Android  (Letto 282 volte)

Offline giuseppesorce

  • Utente junior
  • **
  • Post: 92
  • Respect: +6
    • Google+
    • warpmobile_it
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6,Nexus 5,Nexus 4, Galaxy Nexus, Nexus s, Nexus One,Htc Wildfire S, Nexus 7... etc
  • Sistema operativo:
    Ubuntu 14.04
problema onLayout su diverse versioni Android
« il: 07 Agosto 2014, 14:03:54 CEST »
0
Il problema l' ho risolto ma è davvero strano e lo vorrei condividere con voi.
Devo creare molte Views in runtime per formare uno schema preciso.

1) creo il container padre
2) appena ottengo le misure precise devo creare 5-6 views dentro questo container. In Android  4.2+ funziona ma prima tipo 4.1 non va.

Metto il codice.

Codice (Java): [Seleziona]
        container = new LinearLayout(getContext()) {

                        @Override
                        protected void onLayout(boolean changed, int l, int t, int r, int b) {

                                super.onLayout(changed, l, t, r, b);

                                createChild();

                        }
                };

                addView(container);

        }

        protected void createChild() {
                child = new LinearLayout(getContext());
                addView(child);

        }

Se provo questo codice con Android 4.2, 4.3 e 4.4 funziona benissimo.. ma prima no...
Ho debuggato un po e praticamente quando viene invocato il metodo createChild la view principale 'container' non ha ancora il parent.. se faccio il trace/log di container.getParent() su Android 4.2+ mi da tante info invece in Android 4.1 mi da solo il nome della classe.. come se non fosse ancora inizializzato...

Update...
Modifico il post per inserire una soluzione al volo.. più che altro per farlo funzionare....

Se uso questo codice funziona

Codice (Java): [Seleziona]
         new Handler().postDelayed(new Runnable() {
                      @Override
                      public void run() {

                        child = new LinearLayout(getContext());
                addView(child);
                      }
                    }, 200);
               
« Ultima modifica: 07 Agosto 2014, 14:48:02 CEST da giuseppesorce »
The code is joy and passion but it has a high degree of suffering

Offline GabMarioPower

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 606
  • Respect: +153
    • Github
    • Google+
    • gabrielemariotti
    • GabMarioPower
    • Mostra profilo
  • Play Store ID:
    GAB+MARIO+DEV
  • Sistema operativo:
    Ubuntu 14.04 , Win 10
Re:problema onLayout su diverse versioni Android
« Risposta #1 il: 07 Agosto 2014, 19:07:55 CEST »
0
Potresti provare a mettere il container nel xml e poi popolarlo con qualcosa del tipo

Codice (Java): [Seleziona]
        container.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                container.getViewTreeObserver().removeOnGlobalLayoutListener(this);
                createChild();
            }
        });