2010-09-29 10 views
6

Sto scrivendo un widget con un'attività di configurazione che chiama il metodo seguente quando il suo pulsante OK viene cliccato:Come imposto un aggiornamento in un'attività di configurazione?

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(); 
} 

Questo è quasi pari pari da the documentation. widget_id contiene l'ID del widget che è stato rilevato durante l'attività onCreate().

Quando ho posto un'istanza del widget nella schermata iniziale, ho verificato che ho la sequenza di eventi previsto:

  • onReceive() ottiene un ACTION_APPWIDGET_ENABLED se è il primo.
  • onUpdate() viene chiamato (in cui rilevo che il widget non è configurato e disegna qualcosa come azione predefinita).
  • Viene visualizzata l'attività di configurazione.
  • Quando si preme OK, viene chiamato il metodo ok() precedente.

Il metodo ottiene tutto il percorso fino alla finish() e l'attività di configurazione va via, ma non c'è nessuna chiamata a onUpdate() o onReceive() dopo questo punto. (Il widget stesso non ha updatePeriodMillis.) Finisco con un widget sullo schermo che ha i risultati della mia azione predefinita ma non viene mai aggiornato.

Se imposto il widget senza un'attività di configurazione, viene aggiornato quando viene creato e tutto funziona come previsto (solo senza i bit configurati).

Mi manca qualcosa nel modo in cui imposto un aggiornamento?

Grazie!

+0

Wow, nessuno ...? – Blrfl

+0

questo è un bug noto in Android: onUpdate dovrebbe essere chiamato solo una volta tornato dalla tua attività di configurazione. Ho lo stesso identico problema. Spero che 3.2 lo risolverà – soBinary

risposta

8

questo si è rivelato il lavoro:

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

Per quanto sia orribile, è quello che ho anche finito per fare. Tengo un riferimento statico al mio AppWidgetProvider in giro su cui chiamo suUpdate(). È triste che quello sia attualmente l'unico modo. –

+0

Ho anche affrontato questo problema. Ma come possiamo trasferire i valori di configurazione al metodo "AppWidgetProvider onUpdate"? – MobiDev

+0

@ 256: è possibile salvare le informazioni nel DB o utilizzare SharedPreferences utilizzando il widgetId per mantenere distinte le informazioni –

Problemi correlati