2011-07-05 4 views
0

Je deviens fou sur ce problème. Fondamentalement, j'ai un TileList avec un rendu d'élément personnalisé qui a un TextInput dedans. Disons que la liste peut montrer 4 éléments à la fois, s'il y a 5 items et que j'édite le texte sur le premier, le cinquième sera édité aussi. En général, si un élément est hors de vue, il sera modifié lorsque j'en éditerai un qui est en train de s'afficher.Flex TileList itemrenderer + scroll = HELL

En outre, j'avais surchargé la classe TileList pour exposer la propriété rendererArray (afin que je puisse accéder aux textes sur chaque moteur de rendu) mais elle ne renvoie que les moteurs de rendu qui sont affichés.

Toute aide est appréciée. J'ai besoin de savoir comment remplacer ce comportement bizarre avec itemrenderers qui ne sont pas actuellement affichés. Merci.

+0

Wow, êtes-vous sûr que les objets de données dans le fournisseur de données ne sont pas réticulées en quelque sorte? –

+0

Je ne pense pas qu'ils le soient, je suis allé jusqu'à les créer manuellement et en définissant des propriétés différentes pour chacun d'entre eux. Je soupçonne que cela a quelque chose à voir avec la réutilisation. – JayPea

+0

Si le composant est suffisamment long pour afficher les 5 éléments, le problème disparaît. Existe-t-il un moyen de forcer TileList à créer tous ses moteurs de rendu à la fois et de ne pas les réutiliser? – JayPea

Répondre

1

Ok, si quelqu'un court un problème similaire, voici ce que vous devez faire:

Tout d'abord, éviter d'essayer de itérer les itemrenderers comme je l'ai fait. Si vous avez besoin d'un TextInput ou d'un autre contrôle sur votre TileList, assurez-vous que ces contrôles sont liés à une propriété de votre objet de données, sinon les éléments hors écran auront des valeurs incorrectes puisque leurs éléments seront recyclés à partir des éléments quittant l'écran. tu as défilé.

Si vous y réfléchissez, toute exigence peut être résolue en itérant à travers le fournisseur de données au lieu de l'itemrenderers. En outre, si vous tentez d'exposer la propriété rendererArray comme je l'ai fait, notez que vous ne pourrez parcourir que les objets itemrenderers actuellement affichés, car ceux qui appartiendraient aux éléments hors écran ne le seront pas. être créé encore.

J'espère que cela n'a pas été trop confus ..

Questions connexes