2011-11-01 2 views
2

im fonctionnant avec Listfield dans os 5.0 et letter.my toutes les données viennent de webservice et l'affichent dans listfield .. tout fonctionne bien à la première fois pendant le temps d'analyse et affiche dans listfield avec succès .. si à la première fois que j'ai un seul enregistrement à afficher dans la rangée ça marche bien mais je clique sur mon NextButtonfield pour mettre à jour le listfield, je reçois plus d'un enregistrement et listfield montre moi un un enregistrement ..index pas de mise à jour dans la méthode drawListRow

j'ai debug beaucoup et obtiens un problème .. index de drawListRow méthode non incrémentée comme setSize(listItem.size());. listItem est vecteur et la mise à jour dépend de l'enregistrement. Alors comment mettre à jour l'index dépend de la taille du vecteur?

ou comment supprimer toutes les lignes à l'heure de mise à jour?

Répondre

2

Quelques conseils qui vous aideront à économiser beaucoup de maux de tête lorsque vous travaillez avec des données dans un ListField qui pourraient changer:

  • Lorsque vous utilisez un objet partagé (votre Vector dans ce cas) pour loger des données avec les deux être mis à jour et utilisé par le ListField, assurez-vous que vous synchronisez quel morceau de code met à jour que Vector. Si vous ne le faites pas, vous risquez de rencontrer une exception IndexOutOfBounds car le ListField ne connait pas la taille du Vector lors de sa mise à jour.
  • Si ce que vous affichez est simple, la meilleure solution serait d'avoir une sorte de bean qui a le strict minimum nécessaire pour afficher la ligne. Vous pouvez exposer une sorte de setItems() appel synchronisé dans votre ListField qui ira à travers le vecteur et juste stocker un nom (ou quoi que ce soit que vous affichez) et mettre à jour la taille de sorte que peu importe ce que vous faites à votre vecteur, le ListField aura toujours de bonnes données.

Dans votre cas, vous avez raison d'appeler le setSize(listItem.size()); pour mettre à jour le nombre d'éléments dans la liste. Si vous utilisez ma deuxième suggestion, ce que vous pouvez faire pour tout supprimer est simplement d'appeler list.setItems(new Vector()); et cela définirait la taille à 0 et également effacer les éléments stockés. Alternativement, appeler simplement le list.setSize(0); va émuler la liste étant vide parce qu'il ne pensera pas qu'il a quelque chose à dessiner, donc votre "chaîne vide" sera montrée à la place.

Il se peut aussi qu'il y ait un problème avec votre méthode drawListRow(), donc il ne semble pas que plus d'une ligne soit affichée. Si vous en publiez le code, nous pouvons y jeter un coup d'œil et vous informer s'il y a des problèmes potentiels.

+0

Thanx beaucoup @jprofitt. votre suggetion est très utile. – Hitarth

0

trouvé une solution de this blog article:

Une solution de travail que je trouve est de supprimer le contrôle ListField de son gestionnaire, mettre à NULL et réinitialiser.

pas la meilleure solution, mais actuellement la seule façon dont il travaille pour moi:

Manager.delete(ListField); 
ListField = null; 
ListField = FillListWithItems(); 

Manager.add(ListField); 
Questions connexes