2010-09-29 11 views
6

Estoy escribiendo un widget con una actividad de configuración que llama al método siguiente cuando se hace clic en el botón de OK:¿Cómo fuerzo una actualización en una actividad de configuración?

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

Esto es casi literalmente de the documentation. widget_id contiene la identificación del widget que se desenterró durante la actividad onCreate().

cuando coloco una instancia del widget en la pantalla principal, He verificado que consigo la secuencia esperada de eventos:

  • onReceive() obtiene un ACTION_APPWIDGET_ENABLED si se trata de la primera.
  • onUpdate() se llama (en el que detecto que el widget no está configurado y dibujo algo como una acción predeterminada).
  • Aparece la actividad de configuración.
  • Cuando presiono OK, se llama al método anterior ok().

El método obtiene todo el camino a través de la finish() y la actividad de configuración se va, pero no hay ninguna llamada a onUpdate() o onReceive() después de este punto. (El widget en sí no tiene updatePeriodMillis). Termino con un widget en la pantalla que tiene los resultados de mi acción predeterminada pero nunca se actualiza.

Si configuro el widget sin una actividad de configuración, se actualiza cuando se crea y todo funciona como se espera (solo sin los bits configurados).

¿Me falta algo en la forma en que fuerzo una actualización?

Gracias!

+0

Wow, nadie ...? – Blrfl

+0

este es un error conocido en android: onUpdate solo debe invocarse una vez que hayas regresado de tu actividad de configuración. Tengo exactamente el mismo problema. Con suerte 3.2 lo resolverá – soBinary

Respuesta

8

Esto resultó trabajo:

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

Tan horrible como esto es, eso es lo que también terminé haciendo. Guardo una referencia estática a mi AppWidgetProvider en el que invoco onUpdate(). Es triste que esa sea actualmente la única forma. –

+0

También me enfrenté a este problema. Pero, ¿cómo podemos pasar los valores de configuración al 'AppWidgetProvider onUpdate method'? – MobiDev

+0

@ 256: puede guardar la información en la base de datos o usar las Preferencias Compartidas usando el widgetId para mantener las informaciones distintas –

Cuestiones relacionadas