4

I have a widget on my home screen with several ImageButtons which have default background images. Through the configuration activity, I can change the image on any of the ImageButtons. The problem is that when the screen is rotated, the image on the ImageButton disapears and it changes back to the default image.

I don't know why this happens or how to fix it

4

2 回答 2

10

当屏幕旋转时,使用您传递给AppWidgetManager .updateAppWidget()的最后一个RemoteViews对象重建整个 appwidget 。因此,每次调用 updateAppWidget() 时传递一个 RemoteViews 对象非常重要,该对象上设置了要完全重建小部件所需的所有内容,而不仅仅是要在小部件上更新的一两件事展示。

因此,在您的AppWidgetProvider类中,每当您更新 appwidget 时,您都需要创建一个 RemoteViews 对象,使用该对象为您的 appwidget 构建所有视图设置,然后在完成后调用 AppWidgetManager.updateAppWidget()。

我的猜测是你正在做这样的事情:

  • 获取 RemoteViews 对象
  • 设置新按钮图片
  • 调用 updateAppWidget()
  • 获取 RemoteViews 对象
  • 在按钮上设置待处理的意图
  • 调用 updateAppWidget()

当你需要做这样的事情时:

  • 获取 RemoteViews 对象
  • 设置新按钮图片
  • 在按钮上设置待处理的意图
  • 调用 updateAppWidget()
于 2010-04-16T14:21:28.343 回答
1

mbaird 的答案是一个。
但是还有另一种解决方案。解决方案是在创建/更新小部件的整个视图时使用updateAppWidget ,在仅更改部分视图时使用 partialUpdateAppWidget 。然后视图不会重置。

部分更新示例(在所有小部件上显示一个小同步图标):

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);
}
于 2015-04-16T11:21:21.837 回答