2010-08-04 28 views
0

d'affiche La première fois, de nouveau à Android, et il me semble avoir frappé un barrage routier sur ce problème:Modification des propriétés Voir après onCreate()

Je crée une mise en page dynamique, composée de plusieurs objets « composites » identiques (Ce sont essentiellement LinearLayouts "flottants", chacun contenant une icône (ImageView) et une légende (TextView)). Les coordonnées (x, y) de chaque LinearLayout sont sujettes à changement, en fonction des actions de l'utilisateur, et nécessitent un placement précis (ie: ne peut pas utiliser RelativeLayout, etc), donc je les positionne dans un AbsoluteLayout. Pendant onCreate(), j'ajoute chacun de ces objets en tant que vue enfant à l'intérieur d'un objet AbsoluteLayout, puis en définissant manuellement le paramètre (x, y). Aucun problème jusqu'à présent, fonctionne très bien, la mise en page initiale est parfaite.

Le problème:

Après la onCreate initiale(), je ne peux pas obtenir le (x, y) positions de ces objets à changer à l'écran. Je peux mettre à jour leur layoutParams, mais la disposition à l'écran (à l'intérieur de AbsoluteLayout) n'est jamais actualisée. J'ai essayé forceLayout(), invalidate(), requestLayout(), aucun d'entre eux ne fonctionne.

Y at-il un problème avec mon approche de base ici, ou y a-t-il quelque chose qui me manque? Je pense à changer en SurfaceView et à faire le rendu à la dure, mais mon code fonctionne à 99% en ce moment et je ne veux pas le changer si je n'ai pas à le faire. Le seul problème est que le gestionnaire de disposition refuse simplement d'enregistrer les changements de position pour mes objets enfants.

Aide, qu'est-ce que je fais de mal?

Répondre

0

Avez-vous essayez de créer un gestionnaire pour l'interface utilisateur, puis mettre à jour votre interface utilisateur de ce ..

UI ne sera pas mise à jour en mesure de différents fil. Créez donc un gestionnaire de threads pour l'interface utilisateur et mettez à jour les modifications apportées à l'interface utilisateur à l'aide de ce gestionnaire.

-vinay

+0

Je suis confus ici, comme je pensais que l'interface utilisateur a vécu dans le thread principal (même celui qui a appelé onCreate()). N'est-ce pas le cas? Je n'ai pas encore créé de threads supplémentaires dans mon application. – dreambig

+0

Vous avez raison, l'interface utilisateur fait partie du fil principal. Il sera en cours d'exécution jusqu'à ce que l'application est tué. Mais lorsque vous essayez de mettre à jour l'interface utilisateur à partir d'un endroit différent, vous n'avez peut-être pas accès. Habituellement, ce que j'ai remarqué, c'est qu'il échoue lorsque j'attends quelques événements. – Vinay

+1

Mise à jour: J'ai tout déplacé dans un objet SurfaceView personnalisé, et cela fonctionne BEAUCOUP mieux. Le tutoriel suivant a été un excellent point de départ pour moi: http://www.droidnova.com/playing-with-graphics-in-android-part-i,147.html – dreambig