首先,确保您的 RemoteViews 是小部件状态的完整表示,如果您正在调用AppWidgetManager.updateAppWidget()
. 设置所有待处理的意图,查看数据等。当启动器想要从状态恢复您的小部件时,将重新使用此状态,例如。当旋转发生变化时。
当您想更新远程视图但又不想提供完整的 RemoteViews 表示时,即。您只想更改现有的 remoteView 状态,您可以使用AppWidgetManager.partiallyUpdateAppWidget()
.
此更新与 updateAppWidget(int, RemoteViews) 的不同之处在于,传递的 RemoteViews 对象被理解为小部件的不完整表示,因此不会被 AppWidgetService 缓存。请注意,由于这些更新未缓存,因此在使用 AppWidgetService 中的缓存版本恢复小部件的情况下,它们修改的任何未由 restoreInstanceState 恢复的状态都不会持续存在。与 RemoteViews.showNext(int)、RemoteViews.showPrevious(int)、RemoteViews.setScrollPosition(int, int) 和类似命令一起使用。
例如,在为 onUpdate 之外的小部件推进 ViewPager 时:
final RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.app_widget_4x2);
remoteViews.showNext(R.id.appWidget_viewFlipper);
appWidgetManager.partiallyUpdateAppWidget(widgetId, remoteViews);