2012-06-15 2 views
4

J'ai cette interface:Comment recharger l'interface depuis onLayout?

LinearLayout

-TableLayout heading 
-ViewFlipper flipper 
    - TableLayout1 
    - TableLayout2 
    - TableLayout3 
     ... (dynamicly added) 

je change la largeur de t1 dans vf.onLayout (..) mais je ne suis pas en mesure de le redessiner .... s'il vous plaît aider :/ Voici le code:

@Override 
protected void onLayout(boolean changed, int left, int top, int right, 
int bottom) { 
super.onLayout(changed, left, top, right, bottom); 

Log.i(TAG, "flipper onLayout"); 

int idx = this.getDisplayedChild(); 
Log.i(TAG, "flipper displayed child is: " + idx); 
this.heading.cols_widths = some_cols_widths; 
this.heading.resize_cols(); 
LinearLayout lay = (LinearLayout) this.heading.getParent(); 
lay.requestLayout();  
} 

Cela me rend fou:/

+0

Pas une bonne idée de changer la mise en page sur onLayout –

+0

@nininho ok, alors où est un bon endroit pour mettre à jour la première vue après la mise en page de la deuxième vue? :) – xliiv

+0

Lorsque vous changez/basculez vers l'autre vue, il s'agira de mise en page et de dessin, donc pas besoin de mettre à jour la vue qui n'est pas visible. –

Répondre

1

La réponse est comme Nininho écrit supérieure:

"utiliser postDelayed pour appeler requestLayout."

2

Selon les commentaires, vous voulez changer la "tête" de votre viewFlipper lorsque ch anging la vue. Puisque vous appelez le parent et que vous appelez requestLayout, il suffit de déplacer le super appel pour qu'il dure, donc vous n'avez pas besoin d'appeler requestlayout.

@Override 
protected void onLayout(boolean changed, int left, int top, int right, 
int bottom) { 
    Log.i(TAG, "flipper onLayout"); 

    int idx = this.getDisplayedChild(); 
    Log.i(TAG, "flipper displayed child is: " + idx); 
    this.heading.cols_widths = some_cols_widths; 
    this.heading.resize_cols(); 

    super.onLayout(changed, left, top, right, bottom); 
} 

Ou vous pourriez faire resize_cols() appel requestLayout lui-même.

+0

Désolé pour la confusion, mais .. 'this.heading' est en dehors de ViewFlipper. C'est TableLayout qui est à définir dépend de celui de table (currentrly affiché) dans ViewFlipper. Actuellement, j'essaie de changer l'ordre de dessin par getChildDrawingOrder (int childCount, int i) mais aucun effet. – xliiv

+0

De votre schéma ViewFlipper et TableLayout sont au même niveau, donc leur parent est le même et super pourrait fonctionner, mais c'est une disposition linéaire donc la table a déjà été mise en page lorsque ViewFlipper est et appelant requestLayout pendant la mise en page est probablement discarté. Donc, si vous connaissez déjà la largeur de la colonne, appelez resize_cols() avant de changer le VIewFlipper ou utilisez postDelayed pour appeler requestLayout. –

+0

Ainsi, le problème était que la disposition de l'en-tête dépendait de la mise en page générée plus tard de flipper ViewFlipper. La solution était d'utiliser postDeyaled (plus spécifique, j'ai juste utilisé Post) dans flipper.onLayout avec heading.requestLayout(). Fonctionne parfaitement .. nininho est un dieu :) – xliiv

Questions connexes