Ich bin ein Widget mit einer Konfigurations Aktivität schreiben, die die folgende Methode aufruft, wenn seine OK
Schaltfläche geklickt wird:Wie erzwinge ich ein Update in einer Konfigurationsaktivität?
private void ok()
{
// ...Do Widget Configuration...
// Force an update
Context context = getApplicationContext();
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);
AppWidgetManager.getInstance(context).updateAppWidget(widget_id, views);
// Return the expected result
Intent result = new Intent();
result.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widget_id);
setResult(RESULT_OK, result);
finish();
}
Das von the documentation fast wörtlich ist. widget_id
enthält die Widget-ID, die während der Aktivität onCreate()
ausgegraben wurde.
Wenn ich eine Instanz des Widgets auf dem Startbildschirm platzieren, habe ich festgestellt, dass ich die erwartete Sequenz von Ereignissen erhalten:
onReceive()
erhält eineACTION_APPWIDGET_ENABLED
wenn es das erste ist.onUpdate()
wird aufgerufen (in denen ich feststellen, dass das Widget nicht konfiguriert ist und etwas als Standardaktion zeichnen).- Die Konfigurationsaktivität wird angezeigt.
- Wenn ich
OK
drücke, wird die obige Methodeok()
aufgerufen.
Die Methode ruft den ganzen Weg bis zum finish()
und die Konfiguration Aktivität geht weg, aber es gibt keinen Anruf zu onUpdate()
oder onReceive()
nach diesem Punkt. (Das Widget selbst hat keine updatePeriodMillis
.) Ich am Ende mit einem Widget auf dem Bildschirm, die die Ergebnisse meiner Standardaktion hat, aber nie aktualisiert wird.
Wenn ich das Widget ohne eine Konfigurationsaktivität einstelle, wird es beim Erstellen aktualisiert und alles funktioniert wie erwartet (nur ohne die konfigurierten Bits).
Fehle ich etwas in der Art, wie ich ein Update erzwinge?
Danke!
Wow, niemand ...? – Blrfl
Dies ist ein bekannter Fehler in Android: OnUpdate sollte nur aufgerufen werden, sobald Sie von Ihrer Konfig-Aktivität zurückgekehrt sind. Ich habe genau das gleiche Problem. Hoffentlich 3.2 wird es lösen – soBinary