2017-04-13 1 views
1

Dans mon application, j'ai un champ bouton radio sélectionné. Quand j'ouvre la page, le champ sélectionné a un certain retard. Exemple: J'ouvre la page, ce bouton radio est dans l'état non sélectionné, après un certain temps (disons comme planant sur l'écran/défilement) le bouton radio passe à l'état sélectionné. Y a-t-il un autre moyen de résoudre ce retard?Comment résoudre le retard dans le chargement de la sélection du bouton radio dans l'application?

Scheduler.get().scheduleDeferred(new ScheduledCommand() { 
      @Override 
      public void execute() { 
        statementGroupSelectionModel.setSelected(item, profile.getSelected()); 
      } 
     }); 

Ici, dans le code ci-dessus, « article » est le nom du champ widget et en fonction de mon « GetSelected » valeur, l'icône radio être sélectionné. Ici, ma valeur "getSelected" est vraie.

+0

Pas sûr que je comprends, mais vous pouvez vous abonner à des changements au lieu d'obtenir la valeur actuelle de manière à chaque fois que le retard rend le changement de valeur, vous mettrez à jour votre sélection. –

+0

Pouvez-vous élaborer s'il vous plaît? i essayé d'utiliser les méthodes deffered programmées, mais je na pas obtenir la sortie correcte que je l'ai prévu ne se comportent ainsi. –

Répondre

0

Tout code à l'intérieur scheduleDeferred aura son exécution reportée jusqu'à ce que le navigateur se termine rendu de la page et les déclarations de contrôle de flux à la boucle d'événements Javascript, comme expliqué dans GWT's documentation:

Différer une certaine logique dans l'immédiat : la classe Scheduler
Parfois, vous voulez briser votre boucle logique pour que la boucle d'événements JavaScript obtient une chance de courir entre deux morceaux de code. La classe Scheduler vous permettra de le faire. La logique que vous transmettez à Scheduler s'exécutera ultérieurement, une fois le contrôle renvoyé à la boucle d'événements JavaScript. Ce petit délai peut donner à l'interface une chance de traiter certains événements utilisateur ou d'initialiser un autre code. Pour utiliser la classe Scheduler dans sa forme la plus simple, vous créez une sous-classe de la classe Command, redéfinissant la méthode execute() et passer à Scheduler.scheduleDeferred

Si ce que vous voulez est pour le bouton radio pour sélectionner immédiatement, supprimez l'emballage Scheduler, c.-à-d. déplacer statementGroupSelectionModel.setSelected(item, profile.getSelected()); sur scheduleDeferred.

// Put this here 
statementGroupSelectionModel.setSelected(item, profile.getSelected()); 

// Remove the following code 
Scheduler.get().scheduleDeferred(new ScheduledCommand() { 
     ... 
     }); 

Si ce que vous voulez est pas (désolé, votre explication est assez claire), mais juste pour être en mesure de régler le temps de retard vous au lieu d'avoir à attendre que le navigateur, vous pouvez utiliser la classe Timer qui est expliqué dans la documentation liée ci-dessus.