2010-09-29 5 views
6

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 eine ACTION_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 Methode ok() 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!

+0

Wow, niemand ...? – Blrfl

+0

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

Antwort

8

Dieser wandte sich an Arbeit aus:

new MyWidgetProviderClass() 
    .onUpdate(this, 
      AppWidgetManager.getInstance(this), 
      new int[] { widget_id } 
    ); 
+0

So schrecklich wie das ist, das ist, was ich auch getan habe. Ich behalte einen statischen Verweis auf meinen AppWidgetProvider herum, auf dem ich onUpdate() aufruft. Es ist traurig, dass das derzeit der einzige Weg ist. –

+0

Ich war auch mit diesem Problem konfrontiert. Wie können wir Konfigurationswerte an die AppWidgetProvider onUpdate-Methode übergeben? – MobiDev

+0

@ 256: Sie können entweder die Informationen in der DB speichern oder SharedPreferences mit der widgetId verwenden, um die Informationen getrennt zu halten –

Verwandte Themen