2010-11-29 8 views
6

Estoy trabajando en un widget de Android y funciona muy bien en API Nivel 5 o superior. No es compatible en absoluto en el nivel 1 o 2 de la API. Debería funcionar absolutamente bien en 3 y 4, pero por algún motivo el widget no se actualiza.¿Por qué mi widget de aplicación no se actualiza en API 3 o 4?

El método onUpdate se llama y se ejecuta sin errores; sin embargo, en 3 y 4 no cambia el texto del widget. Estoy bastante perdido. ¿Alguna idea?

@Override 
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
    RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget); 

    DataAccess helper = new DataAccess(context); 
    String text = helper.getCurrentText(); 
    helper.close(); 

    if (text != null) 
     views.setTextViewText(R.id.widget_text, text); 

    Intent intent = new Intent(context, WidgetDetailsActivity.class); 
    PendingIntent pending = PendingIntent.getActivity(context, 0, intent, 0); 
    views.setOnClickPendingIntent(R.id.widget, pending); 

    appWidgetManager.updateAppWidget(appWidgetIds, views); 
} 
+0

¿Ha depurado el widget? ¿Obtienes el texto como se esperaba? ¿Funciona el intento pendiente? ¿Se ha ejecutado onUpdate? – Kaj

+0

Sí, adjunté el depurador y todo funcionó, excepto el cambio de texto. Podría cambiar colores, tamaños, comportamientos y todo eso, pero no pude cambiar el texto. No lo he probado en 1.5 o 1.6 en mucho tiempo porque esa versión se está volviendo cada vez más obsoleta. –

+0

Extraño. Tengo widgets que funcionan con 1.5+, y no he tenido ningún problema con la actualización de textos. – Kaj

Respuesta

0

Prueba esto:

Al final de su método de actualización es necesario llamar a los súper.

@Override 
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
    RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget); 

    DataAccess helper = new DataAccess(context); 
    String text = helper.getCurrentText(); 
    helper.close(); 

    if (text != null) 
     views.setTextViewText(R.id.widget_text, text); 

    Intent intent = new Intent(context, WidgetDetailsActivity.class); 
    PendingIntent pending = PendingIntent.getActivity(context, 0, intent, 0); 
    views.setOnClickPendingIntent(R.id.widget, pending); 

    appWidgetManager.updateAppWidget(appWidgetIds, views); 

    super.onUpdate(context, appWidgetManager, appWidgetIds); 
} 
+0

Intenté esto. Todavía sin suerte. No parece ejecutar las vistas remotas en absoluto. –

0

lo necesario para empezar el servicio en el método de actualización y poner su todo el código en el servicio también, aquí doy OnReceive y servicio de demostración context.startService(new Intent(context, UpdateService.class));

public static class UpdateService extends Service { 
    @Override 
    public void onStart(Intent intent, int startId) { 
     // Build the widget update for today 
     RemoteViews updateViews = buildUpdate(this); 
     // Push update for this widget to the home screen 
     ComponentName thisWidget = new ComponentName(this, 
       Widget.class); 
     AppWidgetManager manager = AppWidgetManager.getInstance(this); 
     manager.updateAppWidget(thisWidget, updateViews); 
    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 
} 

@Override 
public void onReceive(Context context, Intent intent) { 
    final RemoteViews remoteViews = buildUpdate(context); 
    ComponentName cn = new ComponentName(context, Widget.class); 
    AppWidgetManager.getInstance(context).updateAppWidget(cn, remoteViews); 
    super.onReceive(context, intent); 
} 

donde buildUpdate es el método para su actualización Reproductor código

Cuestiones relacionadas