Frage

habe ich ein Widget in Home-Bildschirm mit mehreren ImageButtons der Standard-Hintergrundbilder haben. Durch die Konfiguration Aktivität, kann ich das Bild auf einen des ImageButtons ändern. Das Problem ist, dass, wenn der Bildschirm gedreht wird, das Bild auf dem Image disapears und es ändert sich wieder auf den Standardbild.

Ich weiß nicht, warum dies geschieht und wie es zu beheben

War es hilfreich?

Lösung

Wenn der Bildschirm gedreht wird die gesamte appwidget wieder aufgebaut wird mit dem letzten RemoteViews Objekt, das Sie AppWidgetManager .updateAppWidget (). So ist es sehr wichtig, dass jedes Mal, rufen Sie updateAppWidget () übergeben Sie ein RemoteViews Objekt, das alles Set auf sie hat, dass die Widget Bedürfnisse, wenn es komplett neu aufgebaut wurden, nicht nur ein oder zwei Dinge, die Sie auf das Widget zu aktualisierenden Display.

Also, in Ihrem AppWidgetProvider Klasse , wenn Sie Ihre appwidget aktualisieren müssen Sie ein RemoteViews-Objekt erstellen, bauen alle die Ansichtseinstellungen für Ihre appwidget das Objekt verwenden und dann einen Anruf zu AppWidgetManager.updateAppWidget (), wenn Sie fertig sind.

Meine Vermutung ist, Sie so etwas wie dies tun:

  • Get RemoteViews Objekt
  • Stellen Sie die neue Schaltfläche Bild
  • Anruf updateAppWidget ()
  • Get RemoteViews Objekt
  • Stellen Sie eine anhängige Absicht auf die Schaltfläche
  • Anruf updateAppWidget ()

Wenn Sie benötigen, so etwas zu tun:

  • Get RemoteViews Objekt
  • Stellen Sie die neue Schaltfläche Bild
  • Stellen Sie eine anhängige Absicht auf die Schaltfläche
  • Anruf updateAppWidget ()

Andere Tipps

mbaird Antwort ist die eine.
Aber es gibt eine andere Lösung though. Die Lösung ist die Verwendung updateAppWidget , wenn Sie erstellen / die vollständige Ansicht des Widgets aktualisieren und partiallyUpdateAppWidget , wenn Sie nur einen Teil der Ansicht sind zu ändern. Dann wird die Ansicht nicht zurückgesetzt.

Partial Update Beispiel (zeigen ein wenig Sync-Symbol auf alle Widgets):

AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);    
int[] appWidgetIds = appWidgetManager.getAppWidgetIds(new ComponentName(context, Widget.class)); 
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout); 

views.setViewVisibility(R.id.syncImage, View.VISIBLE);

for (int i = 0; i < appWidgetIds.length; i++) {    
    appWidgetManager.partiallyUpdateAppWidget(appWidgetIds[i], views);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top