我已經編寫了一個AppWidget,它顯示ContentProvider在ListView中的一些數據,但是我無法更新它。當我第一次創建小部件時,它會正確填充,但是在AlarmManager的PendingIntent到達後,ListView上不會發生更新。下面的代碼:android appwidget listview不更新
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);
奇怪的是,當更新發生時,的onUpdate()方法運行 - 我看到從Log.d調用的輸出 - 但目前還沒有onDataSetChanged()的調用中我的RemoteViewsFactory。即使我調用notifyAppWidgetViewDataChanged,也沒有任何效果。
謝謝!這對我有效。 – buntwoi
這種技術可以工作,但隨着我的內存配置文件的部件,內存消耗增長。爲了調試/分析目的,我每隔一分鐘設置一次警報。 –
這個問題讓我受不了。你拯救了我的一天。你是如何遇到這個解決方案的?只是好奇。謝謝Prateek。 –