I am trying to create an App Widget for the Home screen which displays
a line of text. When the user clicks on the Widget, I want the text to
change.  I have pieced together the following which seems to work,
however I am concerned about how I am providing access to the
AppWidgetManager in the onReceive call.  I need the AppWidgetManager
there because I wish to change the text.  I tried adding a class
member variable, 'm_appWidgetManager', which I set during the onUpdate
call.  However when I get the onReceive call, this value is null.  Is
this because the onReceive is called with a different instance of my
class, and if so, why is that?  If I chang m_appWidgetManager to be
static, and it all seems to work, but this does not seem like the
correct solution.

Can anyone tell me how to do the properly?

Thanks.

package com.gabysoft.appwidgettest;

import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.widget.RemoteViews;

public class HelloWidget extends AppWidgetProvider
{
    public static String ACTION_WIDGET_RECEIVER =
"ActionReceiverWidget";

    static AppWidgetManager m_appWidgetManager;

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

        Log.d("GabySoft", "HelloWidget:onUpdate: m_appWidgetManager =
" + m_appWidgetManager);

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

        Intent active = new Intent(context, HelloWidget.class);
        active.setAction(ACTION_WIDGET_RECEIVER);

        PendingIntent pendingIntent =
PendingIntent.getBroadcast(context, 0, active, 0);

        remoteViews.setOnClickPendingIntent(R.id.widget_textview,
pendingIntent);

        appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);
    }

    @Override
    public void onReceive(Context context, Intent intent)
    {
        Log.d("GabySoft", "HelloWidget:onReceive: manager = " +
m_appWidgetManager);

        if (intent.getAction().equals(ACTION_WIDGET_RECEIVER))
        {
            RemoteViews remoteViews = new
RemoteViews(context.getPackageName(), R.layout.main);
            ComponentName thisWidget = new ComponentName(context,
HelloWidget.class);

            remoteViews.setTextViewText(R.id.widget_textview, "Some
other text");
            m_appWidgetManager.updateAppWidget(thisWidget,
remoteViews);
        }

        super.onReceive(context, intent);
    }
}

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to