2016-04-11 5 views
0

Si vous modifiez plusieurs fois la vue, une nouvelle vue est créée dans Viewfactory. (J'utilise Afterburner BTW, mais cela ne devrait pas être le problème) Cela se produit sur tous les appareils (Desktop et Mobile)La vue est créée plusieurs fois avec Gluon

Le code suivant est dans la méthode init

addViewFactory(viewname,() -> { 
    return new ExampleView(); 
}) 

L'exemple ci-dessus produit plusieurs instances de la même vue (ce qui brise certains de mes présentateurs)

Une solution rapide peut être vue ci-dessous, mais ne devrait pas être nécessaire.

ExampleView view = null; 
addViewFactory(viewname,() -> { 
    if (view == null) { 
     view = (View) new ExampleView.getView(); 
    }else{ 
     //comment out the line below to see that this is really happening 
     //throw new RuntimeException("Created View multiple times"); 
    } 
    return view; 
}); 

EDIT:
Le point de vue-Changing arrive encore avec SWITCHVIEW (String)

Répondre

0

Si vous cochez une des samples mobile gluons, ou si vous créez un nouveau projet avec le plugin gluons, vous allez Notez que les appels addViewFactory sont effectués une seule fois, sur la méthode init(), appelée une seule fois, avant la méthode Application.start().

@Override 
public void init() { 
    addViewFactory(PRIMARY_VIEW,() -> new PrimaryView(PRIMARY_VIEW)); 
    addViewFactory(SECONDARY_VIEW,() -> new SecondaryView(SECONDARY_VIEW)); 
}  

Sous le capot, lorsque vous appelez addViewFactory, l'instance de vue est mis en mémoire cache dans une carte de vues. Cela garantit que vous ne pouvez pas ajouter plus d'une fois la même vue, et vous pouvez obtenir l'instance d'une vue donnée à tout moment.

Vous n'avez pas besoin de créer un View chaque fois que vous passez d'un précédent, il suffit d'appeler:

MobileApplication.getInstance().switchView(SECONDARY_VIEW); 
+0

je passe encore la vue par cette méthode et l'appel addViewFactory est dans la méthode init. Ce que je disais, c'est que lorsque je change de vue avec switchView (String), le fournisseur est appelé plusieurs fois même si je ne l'ai enregistré qu'une seule fois. – LucaZ

+0

Je ne peux pas reproduire votre problème. Créez simplement un nouveau projet à vues multiples avec le plugin Gluon, lancez-le et vous verrez que les vues ne sont créées qu'une seule fois. Sinon, envoyez un code pertinent afin que nous puissions reproduire le problème. –