0
votes

Progressbar ne sera pas visible dans Android Studio à partir du code

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 dehors le gestionnaire.

Code de kotlin: xxx

bouton xml: < Pré> xxx

Je cherche des heures maintenant et je n'ai pas pu trouver quelque chose de pertinent à mon cas.

la sortie souhaitée: Obtenez la barre de progression au moment du cliqué sur le bouton.


1 commentaires

Où utilisez-vous Runblocking ()? Est-ce un répartiteur IO ou un fil d'interface utilisateur?


3 Réponses :


2
votes

Supprimer la ligne du code:

progressBar.visibility = View.GONE


0 commentaires

0
votes

Parce que votre style est ( style = "? Android: attr / avantagebarstyle" ) 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.


0 commentaires

2
votes

exécuter une commande comme progressable.visbilibieux = visible.visibilité peut prendre quelques nanosecondes (144100 env).

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 Le thread actuel de manière interruptiblement 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.

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.

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.

vérifier ici sur les types de répartiteurs. https://medium.com/androidDevelopers/ Coroutines-on-android-part-i-get-get-the-fond-3e0e54d20bb xxx


2 commentaires

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.