Aller au contenu

Comment détecter le fin de chargement d'une interface


Sylvain G

Recommended Posts

Howdy-ho,

je recherche un moyen de détecter que mon interface (le fichier xml layout) est finie d'être chargée (= affichée dans sa globalité).

J'explique mon problème:

J'ai une interface avec un View perso, ce View contient un graphe que je génère par du code (via des Drawable). Comme le graphe est crée dynamiquement, j'en profite pour adapter le graphe à la taille de l'écran (le View s'adapte à la taille du contenu = graphe).

J'ai trouvé un moyen facile pour calculer la taille du graphe:

la taille du graphe = la taille du layout principale - la taille des autres View (ex: les Textview...)

int iGraphHeight = aLactivite.findViewById(R.id.svContenu).getHeight() - (aLactivite.findViewById(R.id.rlayText).getHeight()+3);
int iGraphWidth = aLactivite.findViewById(R.id.svContenu).getWidth() - 3;

les +3, -3 sont là pour que le graphe ne dépasse pas la taille du View

Mais subtilité:

au chargement, le layout principale n'est pas encore affiché et sa taille est égale à zéro, donc mon graphe existe mais à une hauteur de zéro ... c'est super utile :o

J'ai trouvé une parade mais ça me parait crado, dans l'activity:

public void onWindowAttributesChanged(LayoutParams params) {
if (this.getCurrentFocus() != null){

	Class_Affich_Graphe imlCurrentLayout = new Class_Affich_Graphe();
	imlCurrentLayout.ReloadGraph(this);
	super.onWindowAttributesChanged(params);
}
}

Donc lors d'un changement d'attribut de la "fenêtre", je vérifie si quelqu'un à le Focus (et donc l'interface forcément est affichée) et je (re)calcule le graphe.

C'est vraiment le premier affichage qui me gène, pour les fois suivante c'est suite à une action (onKeyDown, etc ...) donc c'est facile de savoir quand recalculer le graphe, mais la première fois ...

Donc quelqu'un connait un moyen propre de détecter qu'une interface (le fichier xml layout) est finie d'être chargée (= affichée dans sa globalité).

Merci d'avance :D

Lien vers le commentaire
Partager sur d’autres sites

Coucou!

Perso, j'utilise :

@Override
public void onWindowFocusChanged(boolean hasFocus) {
if (hasFocus)
initLignes();
}

pour initialiser mon contenu et tout fonctionne correctement...

Ca recoit un boolean. S'il est à "true", ca veut dire que c'est fini de charger...

Teste et tu nous diras...

Edit :C'est une méthode toute prête qui fait toute seule ce que tu cherchais à faire... lol

Lien vers le commentaire
Partager sur d’autres sites

...

pour initialiser mon contenu et tout fonctionne correctement...

Ca recoit un boolean. S'il est à "true", ca veut dire que c'est fini de charger...

Teste et tu nous diras...

Edit :C'est une méthode toute prête qui fait toute seule ce que tu cherchais à faire... lol

Merci, j'ai aussi rajouté celle-ci et ça fonctionne assez bien, mais certaine fois ça ne réagit pas (pour 5% des cas, voir moins). Mais ce n'est pas vraiment la bonne logique, on se base sur un autre événement pour en déduire que le chargement est fini.

C'est deux événements distincts: le Focus (ou le changement d'attribut) et la fin du chargement de l'interface. Certaines fois le l'application a déjà le focus alors qu'elle est encore en train de s'afficher, ça doit se jouer au millième mais du coup ce n'est pas fiable, je peux toujours rajouter une pause mais c'est tricher ....

Je continue à chercher.

Ps: au pire, je ferais mon propre listener .... mais j'ai pas envie de passer une journée sur ça pour trouver la bonne méthode 2 jours après XD

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...