2010-03-10 16 views
6

me encontré con una situación interesante con el uso de un ProgressBar en una App Widget ... La documentación (http://developer.android.com/guide/topics/appwidgets/index.html) dice que ProgressBar es una clase Widget apoyado ...ProgressBar en un AppWidget

tengo ningún problema para conseguir la ProgressBar para mostrar en mi aplicación Widget pero el problema es que quiero que solo se muestre como retroalimentación visual al usuario cuando se está procesando en segundo plano.

En ImageViews lo hago a través de RemoteViews.setViewVisibility() y todo funciona bien. Sin embargo, con ProgressBar recibo una excepción que dice que ProgressBar no puede usar este método.

¿Esto es intencional o es esto un error? ¿Hay alguna forma de solucionar este problema?

Respuesta

15

Una idea incluso más simple, es colocar la barra de progreso dentro de un contenedor (por ejemplo, un diseño lineal) y mostrar/ocultar el contenedor.

+0

De hecho, acabo de cambiar a usar este método en una actualización reciente de la interfaz de usuario de mi aplicación ... – Justin

10

Podría ser un error. Hay una anotación particular (@RemotableViewMethod) que necesita en el código fuente de Java de Android para marcar que un método está disponible en RemoteViews. View tiene esto para setVisibility(), pero ProgressBar reemplaza ese método y no tiene la anotación en su propia edición. Si @RemotableViewMethod no se hereda, y la anulación "deshace" la anotación, eso explicaría el síntoma que ve.

Una solución consiste en utilizar dos diseños de widgets de aplicación y elegir el que desee (con o sin ProgressBar) cuando cree su objeto RemoteViews al actualizar su widget de aplicación.

Haré una nota para tratar de replicar esto y, si veo lo mismo, publicaré un problema en el Android issue tracker.

+0

¡Gracias por la información y la solución! Al igual que un FYI, actualmente estoy compilando contra el SDK 1.5, por lo que puede haber sido corregido en una versión posterior. – Justin

+0

Probablemente no, ya que estaba buscando más código actual (a través de Google Code Search) al escribir la respuesta. – CommonsWare

+0

Todavía no funciona desde API nivel 8 en. Pero la sugerencia para usar un diseño adicional está funcionando :) –