我的主屏幕上有一个小部件,其中有几个具有默认背景图像的ImageButton。通过配置活动,我可以更改任何ImageButton上的图像。问题是,当屏幕旋转时,ImageButton上的图像会消失,然后会变回默认图像。
我不知道为什么会发生这种情况或如何解决这个问题
答案 0 :(得分:9)
当旋转屏幕时,使用传递给RemoteViews。updateAppWidget()的最后一个AppWidgetManager对象重建整个appwidget。因此,每次调用updateAppWidget()时,都要传递一个RemoteViews对象非常重要,该对象具有设置在其上的所有内容,如果要完全重建它,则不仅仅需要在窗口小部件上更新一两件事。显示。
因此,在你的AppWidgetProvider类中,无论何时更新appwidget,都需要创建一个RemoteViews对象,使用该对象为appwidget构建所有视图设置,然后调用AppWidgetManager.updateAppWidget ()当你完成。
我的猜测是你在做这样的事情:
当你需要做这样的事情时:
答案 1 :(得分:1)
mbaird的答案是那个。
但是还有另一个解决方案。解决方案是在创建/更新窗口小部件的整个视图时使用 updateAppWidget ,而在仅更改部分视图时使用 partiallyUpdateAppWidget 。然后视图不会重置。
部分更新示例(在所有小部件上显示一个小同步图标):
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
int[] appWidgetIds = appWidgetManager.getAppWidgetIds(new ComponentName(context, Widget.class));
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
views.setViewVisibility(R.id.syncImage, View.VISIBLE);
for (int i = 0; i < appWidgetIds.length; i++) {
appWidgetManager.partiallyUpdateAppWidget(appWidgetIds[i], views);
}