2010-11-29 2 views
6

Ich arbeite an einem Android Widget und es funktioniert gut in API Level 5 oder höher. Es wird überhaupt nicht in API Level 1 oder 2 unterstützt. Es sollte in 3 und 4 absolut funktionieren, aber aus irgendeinem Grund wird das Widget nicht aktualisiert.Warum wird mein App-Widget nicht in API 3 oder 4 aktualisiert?

Die onUpdate-Methode wird aufgerufen und ohne Fehler ausgeführt. In 3 und 4 ändert sich jedoch nicht der Text des Widgets. Ich bin ziemlich ratlos. Irgendwelche Gedanken? diese

@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

Haben Sie das Widget debugged? Erhalten Sie den Text wie erwartet? Funktioniert die ausstehende Absicht? Wird das onUpdate überhaupt ausgeführt? – Kaj

+0

Ja, ich habe den Debugger angeschlossen und alles hat funktioniert, bis auf den Text, der sich geändert hat. Ich könnte Farben, Größen, Verhalten und alles ändern, aber ich konnte den Text nicht ändern. Ich habe es nicht in 1.5 oder 1.6 in einer sehr langen Zeit versucht, weil diese Version mehr und mehr veraltet wird. –

+0

Seltsam. Ich habe Widgets, die mit 1.5+ arbeiten, und hatte keine Probleme mit der Aktualisierung von Texten. – Kaj

Antwort

0

Versuchen:

Am Ende Ihrer Update-Methode Sie den Super anrufen müssen.

@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

Ich habe das versucht. Immer noch kein Glück. Es scheint die Remote-Ansichten überhaupt nicht auszuführen. –

0

Sie benötigen Service auf Update-Methode starten und den gesamten Code in Service auch setzen, hier gebe ich OnReceive und Service-Demo 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); 
} 

wo buildUpdate Methode für Ihr Widget Aktualisierung ist Code

Verwandte Themen