Oh wow, your Thread.sleep(500) trick seems to fix my problem as well. Unfortunately, it does not work 100% of the time. It appears that if I try to update the widget too quickly, the update not push. So it appears to be some timing issue, perhaps?
I don't think that calling Thread.sleep() is ever recommended for the UI thread except when performing animations. It definitely seems hack- y to call Thread.sleep() and in my case it is still unreliable. On Jul 29, 9:11 pm, Padma <jangala.pa...@gmail.com> wrote: > I found that callingupdateAppWidget, followed by Thread.sleep(500) > followed by notifyAppWidgetViewDataCjanged() is solving the problem. > > However I am not sure if it is the right thing to call sleep(). > > Any suggestions on this please. > > On Jul 29, 3:45 pm, Brad <mcmanus.b...@gmail.com> wrote: > > > > > > > > > Hey, thanks for the reply. Glad I am not the only one with this > > problem :-) > > > So, I too thought of restructuring my code such that I would instead > > invoke notifyAppWidgetViewDataChanged(). Unfortunately I got the same > > results - the message was not pushed to the widget promptly. Although, > > after you wrote this post I thought to try it again. It seems that my > > update will unreliably push if I add the > > notifyAppWidgetViewDataChanged() directly before my call to > >updateAppWidget(), then the list updates properly. At any rate, this > > fix seems like a "I-hope-this-works" fix rather than a logical fix. > > And this does not work every time, for example if I execute the same > > update block from a different BroadcastReceiver, it does not work. I > > am at a loss. > > > It looks like there have been others with this problem, > > too...http://code.google.com/p/android/issues/detail?id=8889 > > > Brad > > > On Jul 29, 3:11 pm, Padma <jangala.pa...@gmail.com> wrote: > > > > Even I am facing a similar issue with lists in appwidgets. And I > > > haven't been able to find a solution till now. I tried using the > > > notifyAppWidgetViewDataChanged(). This has fixed a few cases of the > > > list not getting refreshed. But I am still getting the issue randomly. > > > > On Jul 28, 4:35 pm, Brad <mcmanus.b...@gmail.com> wrote: > > > > > 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 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