I am developing an appwidget for 3.x and I have run into a roadblock.
I would like to manually update an appwidget that contains a list by
pressing a "refresh" button on the appwidget. I am unable to manually
update the content of my appwidget because it appears that the
AppWidgetManager does not push my updates to the home screen promptly,
rather it waits until the ListView is scrolled to constructed apply
the new RemoteView. Here is the relevant code:


MyAppWidgetProvider extends AppWidgetProvider {
....
   @Override
   public void onReceive(Context context, Intent intent) {
 
if(intent.getAction().equals(AppWidgetManager.ACTION_APPWIDGET_UPDATE))
{
         AppWidgetManager mgr = AppWidgetManager.getInstance(context);
         int appWidgetId =
intent.getExtras().getInt(AppWidgetManager.EXTRA_APPWIDGET_ID);

         // create the RemoteView
         Intent serviceIntent = new Intent(mContext,
MyAppWidgetService.class);
         serviceIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
appWidgetId);

         RemoteViews appWidget = new
RemoteViews(context.getPackageName(),
R.layout.appwidget_widget_layout);

        // set the listener for my configuration activity
        Intent configureAction = new Intent(mContext,
MyAppWidgetConfigure.class);
        configureAction.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
appWidgetId);
        PendingIntent configurePendingIntent =
PendingIntent.getActivity(mContext, 0, configureAction,
Intent.FLAG_ACTIVITY_NEW_TASK);
 
appWidget.setOnClickPendingIntent(R.id.appwidget_configure_widget_button,
configurePendingIntent);

         appWidget.setRemoteAdapter(appWidgetId,
R.id.appwidget_flight_list, serviceIntent);
         mgr.updateAppWidget(appWidgetId, appWidget);
      }
   }
}

MyAppWidgetService extends RemoteViewsService {
   @Override
    public RemoteViewsFactory onGetViewFactory(Intent intent) {
       return(new MyRemoteViewsFactory(this.getApplicationContext(),
intent));
    }

   public class MyRemoteViewsFactory implements
RemoteViewsService.RemoteViewsFactory {
      ….
      ….
      // this contains all of the code for downloading the proper data
for the list, etc...
    }
}

Here is my problem: my configure activity (which just so happens to be
the same activity that is launched when the appwidget is first
created, by placing it in the xml metadata object) broadcasts the
ACTION_APPWIDGET_UPDATE intent, which is received by
MyAppWidgetProvider correctly. The mgr.updateAppWidget() method gets
executed (I have confirmed by placing log statements on either side),
yet for some reason the widget does not get updated on the home screen
promptly. Instead, it will update only if I scroll the ListView and it
needs to grab new rows, then the MyWidgetService gets constructed and
applied to the widget (with the correctly updated data that I intended
it to have).

So, after scouring the documentation/web for days this seems like the
correct usage. Unfortunately, the app widget does not update as I
would like. What am I doing wrong? Thanks for any help, in advance. I
would love to talk about this problem and share more code if need be.
I just want to figure out this problem!

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

Reply via email to