8
votes

Android - Y a-t-il un événement déclenché lorsque Activity.setContentView a fini de rendu?

J'essaie d'obtenir des valeurs à partir de myImageView.getimagematrix () une fois que mon activité est prête. J'ai essayé d'utiliser le Oncreate () , Onstart () , Onresume () Méthodes mais la matrice I obtenez est la valeur par défaut.

Si j'appelle myImageView.getimagematrix () déclenché par un onclicklistener, après que mon activité est visible, je reçois les bonnes valeurs.


juste pour être plus clair:

  • appeler getimagematrix onstart = matrice {[1.0, 0,0, 0,0] [0.0, 1.0, 0.0] [0.0, 0.0, 1.0]}

  • appelant getimagematrix onclick = matrice {[0.77488154, 0,0, 7.6717987] [0,0, 0,77488154, 0,0] [0,0, 0,0, 1.0]}


2 commentaires

Le problème est que la mise en page ne devient pas mesurée et rendue jusqu'à ce que l'onresume () finie. Vérifiez cette question pour voir comment vous pourriez être averti quand cela se produit: Stackoverflow.com/questions/7750102/...


Merci pour cela, l'Onwindowfocuschanged est appelé une fois que les données sont là, mais elle est appelée à chaque changement de mise au point. Je pourrais ajouter un drapeau qui indiquera l'état initial mais cela ne semble pas si lisse. Je pense que c'est ma solution pour l'instant, toutes les pensées?


4 Réponses :


1
votes

Peut-être que vous pouvez utiliser un OnlayoutChangelistener mais je ne suis pas Bien sûr.


1 commentaires

Pas sûr, de toute façon utiliser cette classe, l'application doit spécifier le niveau d'API "11" ou supérieur. qui malheureusement n'est pas mon cas.



0
votes

Peut-être que vous pourriez peut-être utiliser un asyncctage (http://developer.android.com/reference/andrroid/os/asynccTask.html) qui surveille si l'image de l'image a chargé (peut-être ne correspond peut-être pas null).

Vous pouvez afficher une boîte de dialogue PROGESS dans ONPROGRESSUPDATED, puis poursuivez votre code à partir de l'onpostexecute.


1 commentaires

Merci, cela semble un peu compliqué pour ce qui semble être une tâche triviale. "Notez quand la vue est prête"



4
votes

Je ne suis pas à 100% mais j'avais besoin de savoir quelque chose de similaire pour mon développement et j'ai découvert que Onwindowfocuschanged () est appelé lorsque la vue est chargée. Je ne suis pas sûr que cela remplit vos besoins ou non.


4 commentaires

Merci pour cela, l'Onwindowfocuschanged est appelé une fois que les données sont là, mais elle est appelée à chaque changement de mise au point. Je pourrais ajouter un drapeau qui indiquera l'état initial mais cela ne semble pas si lisse. Je pense que c'est ma solution pour l'instant, toutes les pensées?


Oh ouais désolé j'ai oublié d'ajouter ça. J'ai un booléen global que j'utilise pour vous assurer que c'est le premier appel de Focus changé, puis faites ce que je dois faire. Je suppose que cela dépend de ce que vous devez faire, mais si vous avez juste besoin d'accéder à quelque chose, la première fois que l'écran est chargé, une variable globale devrait le réparer, sinon le code le plus élégant.


Désolé mec, je pense que les deux réponses sont super et je souhaite que je puisse les choisir les deux (puis-je le faire?). Mais je pense que l'autre solution est plus lisse. Quoi qu'il en soit, j'apprécie vraiment votre réponse!


Non, ne le pense pas, ne remarquez pas que vous aviez une autre réponse acceptée. Je pense qu'il est préférable que vous acceptiez celui que vous avez implémenté, si l'autre réponse fonctionne pour vous, c'est celui qui devrait être accepté. Était juste inquiet qu'il y ait eu un problème avec ma réponse, et si vous vouliez aussi savoir pour mon propre code également :)



16
votes

Vous pouvez également essayer cette méthode: xxx


1 commentaires

RemoveglobalonLayoutListener () est maintenant obsolète, commençant par SDK Version 16 (Jelly Bean) RemoveGloballayoutListener () doit être utilisé.