Question

J'ai un widget sur votre écran d'accueil avec plusieurs ImageButtons qui ont des images d'arrière-plan par défaut. Grâce à l'activité de configuration, je peux changer l'image sur l'un des ImageButtons. Le problème est que lorsque l'écran est mis en rotation, l'image sur les disapears ImageButton et il revient à l'image par défaut.

Je ne sais pas pourquoi cela arrive ou comment le résoudre

Était-ce utile?

La solution

Lorsque l'écran est mis en rotation est reconstruit toute appwidget en utilisant la dernière l'objet de RemoteViews vous avez passé à AppWidgetManager .updateAppWidget (). est donc très important que chaque fois que vous appelez updateAppWidget () vous passez un RemoteViews objet qui a tout mis sur ce que les besoins de widget si elle devait être complètement reconstruits, pas seulement une ou deux choses que vous souhaitez mettre à jour sur le widget affichage.

Alors, dans votre AppWidgetProvider classe , chaque fois que vous mettez à jour votre appwidget êtes, vous devez créer un objet RemoteViews, construire tous les paramètres d'affichage pour votre appwidget en utilisant cet objet, puis faire un appel à AppWidgetManager.updateAppWidget () lorsque vous avez terminé.

Je suppose que vous faites quelque chose comme ceci:

  • Get RemoteViews Objet
  • Définir la nouvelle image du bouton
  • Appel updateAppWidget ()
  • Get RemoteViews Objet
  • Définir une intention en attente sur le bouton
  • Appel updateAppWidget ()

Lorsque vous devez faire quelque chose comme ceci:

  • Get RemoteViews Objet
  • Définir la nouvelle image du bouton
  • Définir une intention en attente sur le bouton
  • Appel updateAppWidget ()

Autres conseils

La réponse de mbaird est celui-là.
Mais il y a une autre solution bien. La solution consiste à utiliser updateAppWidget lorsque vous créiez / mettre à jour la vue entière du widget et partiallyUpdateAppWidget lorsque vous changez seulement une partie de la vue. Ensuite, la vue est pas remis à zéro.

Exemple de mise à jour partielle (afficher une petite icône de synchronisation sur tous les 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);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top