我正在尝试将一个小部件添加到launcher3应用程序中,该应用程序从在单独进程中运行的contentprovider获取数据并将其显示在小部件的列表视图中。每当contentprovider数据发生更改时,窗口小部件都必须更新其listview项。我正在寻找一些样本来了解它是如何工作的。有人可以指点我的链接或样本吗?
答案 0 :(得分:1)
您必须手动触发更新。一种方法是向您的AppWidgetProvider
发送广播意图。
public class MyAppWidgetProvider extends AppWidgetProvider {
private static final String REFRESH_ACTION = "com.mypackage.appwidget.action.REFRESH";
public static void sendRefreshBroadcast(Context context) {
Intent intent = new Intent(REFRESH_ACTION);
intent.setComponent(new ComponentName(context, MyAppWidgetProvider.class));
context.sendBroadcast(intent);
}
@Override
public void onReceive(final Context context, Intent intent) {
final String action = intent.getAction();
if (REFRESH_ACTION.equals(action)) {
// refresh all your widgets
AppWidgetManager mgr = AppWidgetManager.getInstance(context);
ComponentName cn = new ComponentName(context, ScheduleWidgetProvider.class);
mgr.notifyAppWidgetViewDataChanged(mgr.getAppWidgetIds(cn), R.id.widget_list);
}
super.onReceive(context, intent);
}
...
}
当您的应用小部件显示的数据发生变化时,您的ContentProvider
只需拨打MyAppWidgetProvider.sendRefreshBroadcast(getContext())
。