Wenn Sie das Aussehen Ihres Widgets aktualisieren (mit einer Aktivität oder Ihrem Broadcast-Empfänger [App widget provider]), müssen Sie alle PendingIntents für die Click-Handler neu zuweisen und dann wie gewohnt updateAppWidget()
aufrufen.
Beispiel mit 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);
}
Hallo, antwortete ich das Problem, das Sie in den Link identifiziert haben Sie auf dem Laufenden. Wenn Sie den Bildschirm drehen, wird das Widget neu erstellt. Wenn das Widget neu erstellt wird, müssen Sie die On-Click-Handler erneut binden, z. Hängen Sie die ausstehenden Klickereignisse erneut an. Deshalb funktioniert der Service für dieses Szenario gut. Es erfasst das onConfigurationChanged-Ereignis und bindet die Handler an die ui-Komponenten zurück. – jagsaund
Vielen Dank, gelöst ohne die Hilfe eines Dienstes, setzen Sie einfach die setOnClickPendingIntent in der OnReceive-Methode. – Alex
Können Sie uns sagen, wie Sie onReceive() für eine Orientierungsänderung aufgerufen haben? Ich habe das gleiche Problem, aber meine AppWidgetProvider.onReceive() wird nicht für dieses Ereignis aufgerufen. –