J'ai un bug étrange avec un widget que j'ai codé - après la rotation de l'écran, le widget cesse de répondre aux événements OnClick. Le code est exactement le même que dans la documentation de développeur Android pour les widgets d'application ici < / a>. J'ai remarqué que d'autres widgets du marché n'ont-ils pas ce problème - y a-t-il une solution de contournement connue? J'ai essayé de taper sur tout l'endroit après une rotation, donc je ne pense pas que son onclickpendickendant ne pas être redimensionné après une rotation; Il ne semble pas être présent du tout. P>
Je ne peux pas trouver un type d'onction () type de déclencheur pour l'appwidgetProvider pour refaire le code d'écoute en cas de rotation, donc je suis tout à fait sûr comment continuer ... P>
Merci! P>
3 Réponses :
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: P>
http://groups.google.com/group/andrroid -Developers / Browse_thread / thread / CA8C2958B6DC086C # P>
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. p> blockQuote>
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? p> blockQuote>
Comme je l'ai dit, vous ne le faites pas (déterminez ou répondez à un changement d'orientation). P>
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: p>
- a des identifiants d'image de ressources; li>
- a des tiges de texte; li>
- a des intentions en attente. li> ul>
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. P>
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. p>
http://kmansoft.wordpress.com/2010/ 05/23 / widgets-and-orientation-chan ... p>
- Kostya P>
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}); }
Premièrement, assurez-vous que votre compte RemoteViews est une représentation complète de l'état du widget si vous appelez 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 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> 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.
appwidgetmanager.partiylupdateAppwidget () code>. p>
final RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.app_widget_4x2);
remoteViews.showNext(R.id.appWidget_viewFlipper);
appWidgetManager.partiallyUpdateAppWidget(widgetId, remoteViews);