Android小部件ImageButton在旋转屏幕时丢失图像

时间:2010-04-16 13:36:28

标签: android background rotation widget imagebutton

我的主屏幕上有一个小部件,其中有几个具有默认背景图像的ImageButton。通过配置活动,我可以更改任何ImageButton上的图像。问题是,当屏幕旋转时,ImageButton上的图像会消失,然后会变回默认图像。

我不知道为什么会发生这种情况或如何解决这个问题

2 个答案:

答案 0 :(得分:9)

当旋转屏幕时,使用传递给RemoteViews。updateAppWidget()的最后一个AppWidgetManager对象重建整个appwidget。因此,每次调用updateAppWidget()时,都要传递一个RemoteViews对象非常重要,该对象具有设置在其上的所有内容,如果要完全重建它,则不仅仅需要在窗口小部件上更新一两件事。显示。

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

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

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

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

  • 获取RemoteViews对象
  • 设置新按钮图像
  • 在按钮上设置待处理意图
  • 调用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);
}