2010-03-10 7 views
6

je suis tombé sur une situation intéressante avec l'aide d'un ProgressBar dans un Widget App ... La documentation (http://developer.android.com/guide/topics/appwidgets/index.html) dit que ProgressBar est une classe widget de prise en charge ...ProgressBar dans un AppWidget

J'ai pas de problème pour la ProgressBar à afficher dans mon Widget App, mais le problème est que je veux que cela ne soit affiché comme rétroaction visuelle à l'utilisateur lorsque le traitement en arrière-plan se passe.

Sur ImageViews je le fais via RemoteViews.setViewVisibility() et tout fonctionne bien. Cependant, avec ProgressBar, je reçois une exception disant que ProgressBar ne peut pas utiliser cette méthode.

Est-ce intentionnel ou est-ce un bug? Est-il possible de contourner ce problème?

Répondre

15

Une idée encore plus simple consiste à placer la barre de progression dans un conteneur (disons une disposition linéaire) et à afficher/masquer le conteneur.

+0

En fait, je suis juste passé à l'utilisation de cette méthode dans une récente mise à jour de l'interface utilisateur de mon application ... – Justin

10

Cela peut être un bug. Il y a une annotation particulière (@RemotableViewMethod) dont vous avez besoin dans le code source Java d'Android lui-même pour marquer une méthode comme étant disponible via RemoteViews. View a ceci pour setVisibility(), mais ProgressBar remplace cette méthode et ne possède pas l'annotation sur sa propre édition. Si @RemotableViewMethod n'est pas hérité, et le remplacement annule l'annotation, cela expliquerait le symptôme que vous voyez. Une solution de contournement consiste à utiliser deux dispositions de widget d'application et choisissez celle que vous voulez (avec ou sans ProgressBar) lorsque vous créez votre objet RemoteViews lors de la mise à jour de votre widget d'application.

Je vais faire une note pour essayer de répliquer cela et, si je vois la même chose, je vais poster un problème sur le .

+0

Merci pour l'info et la solution de contournement! Juste comme un FYI, je compile actuellement contre le 1.5 SDK ainsi il peut avoir été corrigé dans une version postérieure. – Justin

+0

Probablement pas, puisque je regardais le code plus actuel (via Google Code Search) lors de l'écriture de la réponse. – CommonsWare

+0

Il ne fonctionne toujours pas à partir de l'API Niveau 8 sur. Mais l'astuce pour utiliser une mise en page supplémentaire fonctionne :) –