progressBar Android ne met pas à jour la vue de progrès / dessinable
deux Barres qui montre la progression d'un jeu. Si l'utilisateur d'obtenir des points et de temps etc la progressBars doit être mis à jour:
private TextView tv;
private ProgressBar levelHoldBar;
private ProgressBar levelUpBar;
//...
private void updateViews() {
//...
levelHoldBar.setMax(currentLevel.getThreshold());
levelHoldBar.setProgress(currentPoints > currentLevel.getThreshold() ? currentLevel.getThreshold() : currentPoints);
levelUpBar.setMax(nextLevel.getThreshold());
levelUpBar.setProgress(currentPoints > nextLevel.getThreshold() ? nextLevel.getThreshold() : currentPoints);
tv.setText(currentPoints+"/"+currentLevel.getThreshold());
Log.d(TAG, "hold prog/max "+levelHoldBar.getProgress()+"/"+levelHoldBar.getMax());
Log.d(TAG, "up prog/max "+levelUpBar.getProgress()+"/"+levelUpBar.getMax());
}
ie. Sorties:
12-03 17:48:33.918: DEBUG/MainActivity(6829): hold prog/max 20/20
12-03 17:48:33.918: DEBUG/MainActivity(6829): up prog/max 20/50
Le Journal.d(...) à la fin des spectacles TOUJOURS les valeurs correctes, mais PARFOIS visual bars de la progressBars ne montrent pas le bon progrès. Ils montrent des progrès qui avait été établi précédemment, même si les getters pour "max" et de "progrès" renvoient des valeurs correctes (dans l'exemple, la barre de 20% (au lieu de 100%) pour la levelHoldBar et environ 2% (au lieu de 40%) pour la levelUp-bar). Je ne peux pas comprendre, pourquoi le journal-la sortie est correcte mais un drawable est faux!? Le TextView (tv) est correctement mis à jour! Ce qui se passe ici? Comment puis-je régler ce problème?
source d'informationauteur Stuck
Vous devez vous connecter pour publier un commentaire.
SOLUTION: C'est un Bug dans la ProgressBar!
enfin... je crois que j'ai trouvé la solution...
cela ne fonctionne pas comme on pourrait le penser:
La setProgress(...) semble ne pas déclencher la mise à jour sur le drawable si la même valeur est transmise à nouveau. Mais ce n'est pas déclenchée au cours de la setMax, trop. Si la mise à jour est manquant. Semble comme un Bug dans l'android ProgressBar! Ce qui m'a pris environ 8 heures maintenant.. lol 😀
Pour résoudre ce problème, je fais juste un bar.setProgress(0) avant chaque mise à jour... ce n'est qu'une solution de contournement, mais il fonctionne pour moi comme prévu:
J'ai pu obtenir que cela fonctionne avec
View.post()
:Comme avec SKTs répondre, il est clair pour moi pourquoi cela devrait fonctionner si ce n'est pas
Toutefois, cela semble être vrai jusqu'à et y compris Android Lollipop.
Vous pouvez utiliser un gestionnaire de mise à jour
progressbar
Pour moi, l'appel de
setMax()
avantsetProgress()
travaillé pour une raison quelconque.Dans mon cas, j'ai créer VerticalSeekBar, et la solution d'arrêt ne fonctionne pas. Après des heures, j'ai trouvé une solution:
Espérer que l'aide n'importe qui.
Créer updateThumb(); la méthode en VerticalSeekbar
Et ensuite appeler la mise à jour de pouce de la méthode après la définition de progrès.
son travail pour moi dans verticalseekbar calss
Assurez-vous que le style de la progressBar est
style="@android:style/Widget.La ProgressBar.Horizontale"
sinon, il va montrer de Progression Indéterminée
(Juste au cas où il aidera quelqu'un)
Grâce Coincé pour le message indiquant qu'il y a un Android bug. J'ai aussi une verticale de la barre de recherche.
La question était quand j'était en train de changer le progrès dessinés. Le drawable serait mis à jour, mais la barre est fixée à 0 et une très petite taille. J'ai été capable de le faire pour redimensionner avec updateThumb(), mais les progrès sont encore à 0.
Pour définir le progrès de retour à la valeur d'origine, j'ai ajouté un mylayer.setLevel(...);. J'ai trouvé en lisant le code source de la ProgressBar.doRefreshProgress(...). Vous pourriez être en mesure de faire
seekBar.getProgressDrawable.setLevel(...)
.Cela a fonctionné pour moi...
OneFragmen.java
Rien ici a fonctionné pour moi, alors je suis venu avec une solution légèrement différente. J'ai remarqué que tout fonctionne bien jusqu'à ce que je tente de changer la valeur maximale (appel setMax avec une valeur différente).
Mon code:
Cela fonctionne parfaitement pour moi. Je peux appeler setMax comme d'habitude et j'ai juste besoin de remplacer getProgress et setProgress avec getProgressFixed et setProgressFixed.
Ne remplacent pas les setProgress et getProgress. Ils sont appelés en interne.
Ma solution ne compte pas avec setMin. Si vous en avez besoin, de modifier le code en conséquence.
si vous aimez le plein progressbar
si votre progressbar vide
J'ai essayé toutes les solutions proposées, ils n'ont pas de travail. S'avère... le vrai problème est que mon code était occupé en cours d'exécution, essentiellement bloquer le thread d'INTERFACE utilisateur. Donc la bonne solution, qui instantanément résolu le problème était... mettre mes occupé de code à l'intérieur d'une tâche asynchrone.
Dans mon cas, j'ai été chargement de plusieurs milliers d'enregistrer à partir de données XML dans une base de données SQLite. Naturellement, je voulais mettre à jour la barre de progression. Code qui aurait dû le faire ( prg_bar.setProgress(iProgressPercentage) ) n'a rien fait, et à la fin de la charge, l'INTERFACE utilisateur a finalement obtenu une chance de s'exécuter. Pouf, la barre de progression va de zéro à 100.
Même code à mettre dans le onProgressUpdate() de la tâche asynchrone, enroulé autour du même code fonctionnel, a parfaitement fonctionné. Cela me rend très sceptique sur l'idée "qu'il y a un bug dans la barre de progression de code" et que la définition de la max et de zéro ou de l'une de ces choses n'étaient jamais plus qu'une coïncidence.
Pour moi travaillé si j'ai mis setVisibility() visible avant chaque setProgress()