2010-12-13 2 views
7

Im Folgenden ist eine vereinfachte Version meiner Klasse. Ich habe Probleme in der onReceive-Methode, die das Widget TextView nicht aktualisiert. Es zeigt die korrekten Informationen im Logcat an, die in der Zeile vor dem setTextViewText ausgegeben werden. Ich bin mir nicht sicher, was falsch ist und habe mir die Haare ausgezogen (und ich bin schon bald Glatzenbildung).setTextViewText nicht Widget aktualisieren

public class SnowWidget extends AppWidgetProvider { 

public static List<Article> mymtns = new ArrayList<Article>(); 
public static RemoteViews remoteViews; 
public static ComponentName thisWidget; 

public static String amount = ""; 
public static String mtn_name = ""; 
public static String desc = ""; 
public static String condition = ""; 
public static String[] type; 

public static int index = 0; 

@Override 
public void onUpdate(Context context, AppWidgetManager appWidgetManager, 
    int[] appWidgetIds) 
{ 

    remoteViews = new RemoteViews(context.getPackageName(), R.layout.main); 

    thisWidget = new ComponentName(context, SnowWidget.class); 

    // This one works fine 
    remoteViews.setTextViewText(R.id.snowwidget, mtn_name+ "\n"+ amount+"\"\n"+ condition); 

    /* Make the buttons work */ 

Intent next = new Intent(context, SnowWidget.class); 
next.setAction(ACTION_WIDGET_RECEIVER); 

PendingIntent nextPendingIntent = PendingIntent.getBroadcast(context, 0, next, 0); 
remoteViews.setOnClickPendingIntent(R.id.nextMtn, nextPendingIntent); 

/* END - Make the buttons work */ 

    appWidgetManager.updateAppWidget(thisWidget, remoteViews); 
} 

@Override 
public void onReceive(Context context, Intent intent) { 

    // check, if our Action was called 
    if (intent.getAction().equals(ACTION_WIDGET_RECEIVER)) { 
     if(mymtns.size() > 0) 
     { 

      // This show up correctly in logcat 
      Log.d("onReceive", "New Info => "+ mtn_name+ "\n"+ amount+"\"\n"+ condition); 
      // This never updates my widget 
      remoteViews.setTextViewText(R.id.snowwidget, mtn_name+ "\n"+ amount+"\"\n"+ condition); 

     } 
    } 

    super.onReceive(context, intent); 
} 

}

+1

Update für Antwort – Brombomb

Antwort

20

die Antwort gefunden. Nach dem Aufruf der remoteViews.setTextViewText müssen Sie das Widget mit einem Anruf an updateAppWidget aktualisieren. Der Code, den ich hinzugefügt habe, ist unten abgebildet.

AppWidgetManager manager = AppWidgetManager.getInstance(context); 
manager.updateAppWidget(thisWidget, remoteViews); 
+0

Vielen Dank dafür! Es ist schwer zu beschreiben, wie viele Kopfschmerzen mir dieses Problem bereitet hat. –

+3

Ich habe diesen Code und es funktioniert immer noch nicht .. obwohl es vorher war. Ich habe keine Ahnung, was passiert ist. – xdumaine

+0

Wo fügen Sie diese paar Zeilen Code hinzu? Ich kann mein Widget nicht funktionieren sehen. – Si8