J'ai donc fait une application, et j'essaie d'afficher la barre de progression à l'époque où un bouton est cliqué.
Il ne montre que si je mets la vue visible.avisible em> dehors le gestionnaire. p> Code de kotlin: strong> p> Je cherche des heures maintenant et je n'ai pas pu trouver quelque chose de pertinent à mon cas. p> la sortie souhaitée: em>
Obtenez la barre de progression au moment du cliqué sur le bouton. P> p>
3 Réponses :
Supprimer la ligne du code:
progressBar.visibility = View.GONE
Parce que votre style est ( style = "? Android: attr / avantagebarstyle" code>) et votre largeur / hauteur sont (Wrap_Content). pour style de bar. Vous devriez lui donner de la valeur (par exemple 100DP à la largeur et à la hauteur de 20 dp. P>
exécuter une commande comme Le fil principal peut demander à d'autres discussions d'effectuer des tâches et au lieu d'attendre Pour la réponse de ces threads, il reprend son exécution normale (prochaines lignes de code). Votre prochaine ligne de code (Runblocking: exécute une nouvelle Coroutine et Blocks Strong> Le thread actuel de manière interruptiblement em> jusqu'à ce que son achèvement.) Bloque le courant jusqu'à la fin de la méthode de Runblocking. . Cela signifie simplement que le thread principal ne peut pas exécuter d'autres commandes ou des réponses de processus reçues des autres threads jusqu'à ce que la coroutine soit terminée. P> Une fois la Coroutin terminée. Le fil principal reprend son exécution, montrant et masquant une barre de progression simultanément, c'est pourquoi vous ne voyez pas la barre de progression Spinning. P> Le fil principal ne doit être utilisé que pour les opérations d'interface utilisateur. Au lieu de bloquer votre fil principal, vous devez effectuer les opérations de réseau en Coroutin en passant au contexte IO. P> vérifier ici sur les types de répartiteurs.
https://medium.com/androidDevelopers/ Coroutines-on-android-part-i-get-get-the-fond-3e0e54d20bb p> progressable.visbilibieux = visible.visibilité code> peut prendre quelques nanosecondes (144100 env).
Cela fonctionne, mais je continue à obtenir cette erreur: E / MainActivity: Erreur: Seul le fil d'origine créé une hiérarchie de vue peut toucher ses vues. Et l'application se bloque
Votre application s'écrase car vous effectuez des opérations liées à l'interface utilisateur sur le fil d'arrière-plan. Vos opérations d'interface utilisateur ne doivent être effectuées que sur le fil principal. Utilisez la méthode ou le gestionnaire de RunonUthread pour effectuer des opérations liées à l'interface utilisateur sur le fil principal. Vous pouvez également utiliser avecContext (Dispatchers.Main) ou lancement (Dispatchers.Main) pour effectuer des opérations liées à l'assurance-emploi.
Où utilisez-vous Runblocking ()? Est-ce un répartiteur IO ou un fil d'interface utilisateur?