我的主屏幕上有一个小部件,其中包含多个具有默认背景图像的ImageButton。通过配置活动,我可以更改任何ImageButton上的图像。问题是当旋转屏幕时,ImageButton上的图像消失并且它变回默认图像。Android小部件ImageButton在旋转屏幕时丢失图像
我不知道为什么会这样或如何解决它
我的主屏幕上有一个小部件,其中包含多个具有默认背景图像的ImageButton。通过配置活动,我可以更改任何ImageButton上的图像。问题是当旋转屏幕时,ImageButton上的图像消失并且它变回默认图像。Android小部件ImageButton在旋转屏幕时丢失图像
我不知道为什么会这样或如何解决它
当屏幕旋转时,整个appwidget使用您传递给AppWidgetManager .updateAppWidget最后RemoteViews对象()重建。因此,每次调用updateAppWidget()时,都必须传递一个RemoteViews对象,该对象包含所有设置的RemoteViews对象,以便在完成重新构建时控件所需的所有内容,而不仅仅是要在窗口小部件上更新的一两件事情显示。
因此,在您的AppWidgetProvider类中,无论何时更新appwidget,您都需要创建一个RemoteViews对象,使用该对象为您的appwidget构建所有视图设置,然后在调用AppWidgetManager.updateAppWidget()时你完成了。
我的猜测是,你正在做的事情是这样的:
当你需要做这样的事情:
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);
}
这一工程...谢谢! – alejom99 2010-04-16 15:13:09
如果您从两个位置进行更新,该怎么办?又名'OnRecieve'和'OnUpdate' – Doomsknight 2012-09-17 15:51:46
@Doomsknight为什么这会有所作为?只需在两者中正确更新它。我不确定你的问题如何适用于这里提出的原始问题。 – 2012-09-17 17:00:19