gpt4 book ai didi

android appwidget listview 不更新

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:18:48 25 4
gpt4 key购买 nike

我已经编写了一个 AppWidget,它在来自 ContentProvider 的 ListView 中显示一些数据,但我无法更新它。当我第一次创建小部件时,它被正确填充,但在 AlarmManager 的 PendingIntent 到达后,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 调用的输出——但在我的 RemoteViewsFactory 中没有调用 onDataSetChanged()。即使我调用 notifyAppWidgetViewDataChanged,也没有效果。

最佳答案

这是因为您的 RemoteViewsFactory 缓存了它为每个小部件 ID 创建的工厂。因此,当同一个小部件发送创建新工厂的请求(通过您的小部件适配器服务)时,将返回同一个工厂。因此, ListView 没有“更新”。

我是如何解决它的:

在你的 WidgetProviderClass 中

adapter.setData(Uri.fromParts("content", String.valueOf(appWidgetIds[i]+randomNumber), null));

其中 randomNumber 是一个随机数(您的 WidgetProvider 类的公共(public)静态成员)。

然后在您的 RemoteViewsFactory 类中,执行:

appWidgetId = Integer.valueOf(intent.getData().getSchemeSpecificPart())
- WidgetProvider.randomNumber;

这“愚弄”服务,使其认为它必须为另一个小部件创建一个工厂,因此,创建一个具有更新值的新工厂,该工厂附加到您的小部件。

希望这对您有所帮助。

关于android appwidget listview 不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14486888/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com