Cada vez que actualice el aspecto de su widget (utilizando una actividad o su Broadcast Receiver [App widget provider]), también debe reasignar todos los PendingIntents para los manejadores de clics y luego llamar al updateAppWidget()
de forma normal.
Ejemplo con setTextViewText()
:
// This will update the Widget, but cause it to
// stop working after an orientation change.
updateWidget()
{
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
remoteViews.setTextViewText(R.id.widget_text_view, "Updated widget");
appWidgetManager.updateAppWidget(appWidgetId, remoteViews);
}
// This is the correct way to update the Widget,
// so that it works after orientation change.
updateWidget()
{
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
remoteViews.setTextViewText(R.id.widget_text_view, "Updated widget");
Intent intent = new Intent(context, MyWidgetActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, ...);
remoteViews.setOnClickPendingIntent(R.id.widget_click_button, pendingIntent);
appWidgetManager.updateAppWidget(appWidgetId, remoteViews);
}
Hola, me contestó el problema que ha identificado en el enlace informados. Cuando gira la pantalla, hace que se vuelva a crear el widget. Cuando se recrea el widget, debe volver a vincular los manejadores de clic, es decir. adjunte los eventos de clic pendientes nuevamente. Es por eso que el servicio funciona bien para este escenario. Captura el evento onConfigurationChanged y vuelve a vincular los controladores a los componentes de la interfaz de usuario. – jagsaund
Gracias, resuelto sin la ayuda de un servicio, simplemente configurando de nuevo setOnClickPendingIntent en el método OnReceive. – Alex
¿Puede decirnos cómo recibió onReceive() para solicitar un cambio de orientación? Estoy teniendo el mismo problema, pero mi AppWidgetProvider.onReceive() no se llama para este evento. –