7
votes

3 Réponses :


3
votes

J'ai reçu la réponse suivante d'un message que j'ai effectué sur Google Groupes qui résolvait mon problème. Je ne peux pas dire si cela résoudrait le problème de l'affiche original, mais je le posterais, au cas où quelqu'un d'autre traverse ce problème. Le lien vers My Google Groups Post est:

http://groups.google.com/group/andrroid -Developers / Browse_thread / thread / CA8C2958B6DC086C #


Il n'y a pas d'ONUPDate sur les modifications de la configuration. L'écran d'accueil recrée votre widget, puis prend les plus récents souvenants et l'applique à la widget.

Je pensais que c'était recréer le widget en rotation. Le problème est, je ne semble pas recevoir de messages à cet effet et avoir aucun moyen (que je puisse voir) de rétablir la connexion. Comment puis-je déterminer qu'un tour de rotation est arrivé et mis en place une nouvelle onclick connexion?

Comme je l'ai dit, vous ne le faites pas (déterminez ou répondez à un changement d'orientation).

Qu'est-ce que vous faites, c'est sûr que chaque fois que votre code appuie un compte souvenir objet dans l'application à domicile pour votre widget, il est complet dans tout respects:

  • a des identifiants d'image de ressources;
  • a des tiges de texte;
  • a des intentions en attente.

    Ne faites pas de mises à jour de widget "incrémentielles", comme vous le feriez avec un régulier Activité - Ne définissez pas les intention d'abord, puis les images, puis le texte reflétant les informations actuelles.

    L'application d'origine fonctionne comme un processus distinct et son état peut être hors de pas avec votre récepteur de widget. Quand ça fait, la seule chose qu'il a pour La création de votre widget est votre dernier objet RemoteViews. Si c'est Complet et a toutes les pièces, tout fonctionnera très bien. Si c'est seulement a le texte le plus récent de texte ou d'image, les mises à jour antérieures qui avaient la Des intentions seront perdues.

    http://kmansoft.wordpress.com/2010/ 05/23 / widgets-and-orientation-chan ...

    - Kostya


0 commentaires

0
votes

Le code suivant semble être capable de résoudre le problème.

@Override
public void onAppWidgetOptionsChanged(Context context, AppWidgetManager appWidgetManager, int appWidgetId, Bundle newOptions) {
    super.onAppWidgetOptionsChanged(context, appWidgetManager, appWidgetId, newOptions);
    onUpdate(context, appWidgetManager, new int[] {appWidgetId});
}


0 commentaires

1
votes

Premièrement, assurez-vous que votre compte RemoteViews est une représentation complète de l'état du widget si vous appelez appwidgetmanager.updateAppwidget () code>. Configurez toutes les intentions en attente, affichez des données, etc. Cet état sera réutilisé lorsque le lanceur souhaite restaurer votre widget de l'état, par exemple. Lorsque la rotation change.

Lorsque vous souhaitez mettre à jour vos vues à distance, mais que vous ne souhaitez pas fournir une représentation complète des télévisions, c'est-à-dire. Vous voulez simplement modifier un état RemoteView existant, vous pouvez utiliser appwidgetmanager.partiylupdateAppwidget () code>. p>

Cette mise à jour diffère de UpdateAppwidget (int, RemoteViews) dans ce Objet RemoteViews qui est passé est compris pour être incomplet représentation du widget, et donc n'est pas mis en cache par le Appwidgetservice. Notez que, parce que ces mises à jour ne sont pas mises en cache, aucun indiquer qu'ils modifient que ce n'est pas restauré par la restaurationInstate ne persistera pas dans le cas où les widgets sont restaurés à l'aide de la Version mise en cache d'appwidgetservice. Utiliser avec RemoteViews.Showntex (int), RemoteViews.ShowPrevious (int), RemoteViews.SetsSetScrollPosition (int, int) et commandes similaires. P> blockquote>

Par exemple, lors de l'avancement d'un visionneur pour un widget en dehors de OnUpdate: P>

final RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.app_widget_4x2);
remoteViews.showNext(R.id.appWidget_viewFlipper);
appWidgetManager.partiallyUpdateAppWidget(widgetId, remoteViews);


0 commentaires