2010-03-10 6 views
6

ich in eine interessante Situation lief eine ProgressBar in einer App Widget mit der Verwendung ... Die Dokumentation (http://developer.android.com/guide/topics/appwidgets/index.html) sagt, dass ProgressBar eine unterstützte Widget-Klasse ist ...ProgressBar in einer AppWidget

Ich habe kein Problem, das immer ProgressBar zur Anzeige in meinem App-Widget, aber das Problem ist, dass ich möchte, dass es nur als visuelles Feedback für den Benutzer angezeigt wird, wenn die Hintergrundverarbeitung stattfindet.

Auf ImageViews mache ich dies über RemoteViews.setViewVisibility() und alles funktioniert gut. Mit ProgressBar bekomme ich jedoch eine Ausnahme, die besagt, dass ProgressBar diese Methode nicht verwenden kann.

Ist das beabsichtigt oder ist das ein Fehler? Gibt es eine Möglichkeit, dieses Problem zu umgehen?

Antwort

15

Eine noch einfachere Idee ist es, den Fortschrittsbalken in einen Container (etwa ein lineares Layout) zu legen und den Container ein-/auszublenden.

+0

Ich habe gerade diese Methode in einem aktualisierten UI-Update meiner App verwendet ... – Justin

10

Es könnte ein Fehler sein. Es gibt eine bestimmte Anmerkung (@RemotableViewMethod), die Sie im Java-Quellcode von Android selbst benötigen, um eine Methode als über RemoteViews verfügbar zu markieren. View hat dies für setVisibility(), aber ProgressBar überschreibt diese Methode und hat die Anmerkung nicht in einer eigenen Ausgabe. Wenn @RemotableViewMethod nicht vererbt wird und die Überschreibung die Annotation "rückgängig macht", würde das das Symptom erklären, das Sie sehen.

Eine Problemumgehung besteht darin, zwei App-Widget-Layouts zu verwenden und das gewünschte zu wählen (mit oder ohne ProgressBar), wenn Sie Ihr RemoteViews Objekt beim Aktualisieren Ihres App-Widgets erstellen.

Ich werde eine Notiz machen, um zu versuchen, dies zu replizieren, und, wenn ich die gleiche Sache sehe, werde ich ein Problem darauf auf der Android issue tracker veröffentlichen.

+0

Danke für die Info und den Workaround! Nur als ein FYI, kompiliere ich derzeit gegen das 1.5 SDK, so dass es möglicherweise in einer späteren Version behoben wurde. – Justin

+0

Wahrscheinlich nicht, da ich beim Schreiben der Antwort nach aktuellem Code (via Google Code Search) gesucht habe. – CommonsWare

+0

Es funktioniert immer noch nicht von API Level 8 an. Aber der Tipp, ein zusätzliches Layout zu verwenden, funktioniert :) –