Ho scritto un AppWidget che visualizza alcuni dati in un ListView da un ContentProvider, ma ho problemi ad aggiornarlo. Quando creo per la prima volta il widget, viene popolato correttamente, ma dopo l'arrivo di PendingIntent di AlarmManager, non si verifica alcun aggiornamento sul ListView. Ecco il codice:android listwidget listview non si aggiorna
Intent update = new Intent(context, MenuWidgetProvider.class);
update.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
update.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);
PendingIntent pIUpdate = PendingIntent.getBroadcast(context, 0, update, 0);
((AlarmManager) context.getSystemService(Context.ALARM_SERVICE)).
set(AlarmManager.RTC, nextTime.toMillis(false), pIUpdate);
Log.d(TAG, "updating: " + dmt.mealName);
for (int i = 0; i < appWidgetIds.length; ++i) {
int widgetId = appWidgetIds[i];
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_menu);
// meal name
views.setTextViewText(R.id.widget_locname, prefs.getString(PREF_WIDGET_LOCNAME, ""));
// adapter
Intent adapter = new Intent(context, MenuWidgetAdapterService.class);
adapter.putExtra(EXTRA_LOCATIONID, prefs.getInt(PREF_WIDGET_LOCID, -1));
adapter.putExtra(EXTRA_MEALNAME, dmt.mealName);
adapter.putExtra(EXTRA_DATE, dmt.date.toString());
views.setRemoteAdapter(R.id.widget_list, adapter);
// update
manager.updateAppWidget(widgetId, views);
}
super.onUpdate(context, manager, appWidgetIds);
cosa strana è, quando l'aggiornamento avviene, il metodo onUpdate() corre - Vedo l'uscita dalla chiamata Log.d - ma non c'è nessuna chiamata a onDataSetChanged() in my RemoteViewsFactory. Anche quando chiamo notifyAppWidgetViewDataChanged, nessun effetto.
Grazie! Questo ha funzionato per me. – buntwoi
Questa tecnica funziona ma, con il profilo di memoria del widget, il consumo di memoria aumenta. Ho impostato un allarme su intervalli di un minuto per scopi di debug/profiling. –
Questo problema mi aveva spinto al muro. Mi hai salvato la giornata. Come hai trovato questa soluzione? solo curioso. Grazie, Prateek. –