Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当屏幕旋转时,Android widget ImageButton会丢失图像_Android_Background_Rotation_Widget_Imagebutton - Fatal编程技术网

当屏幕旋转时,Android widget ImageButton会丢失图像

当屏幕旋转时,Android widget ImageButton会丢失图像,android,background,rotation,widget,imagebutton,Android,Background,Rotation,Widget,Imagebutton,我的主屏幕上有一个小部件,带有几个带有默认背景图像的ImageButton。通过配置活动,我可以更改任何ImageButton上的图像。问题是,当屏幕旋转时,ImageButton上的图像消失,并变回默认图像 我不知道为什么会发生这种情况,也不知道如何修复它当屏幕旋转时,整个appwidget将使用您传递给.updateAppWidget()的最后一个对象重建。因此,每次调用updateAppWidget()时,传递一个RemoteViews对象,该对象上设置了小部件完全重建时所需的所有内容,而

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


我不知道为什么会发生这种情况,也不知道如何修复它

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

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

我猜你在做这样的事情:

  • 获取远程视图对象
  • 设置新按钮图像
  • 调用updateAppWidget()
  • 获取远程视图对象
  • 在按钮上设置挂起的意图
  • 调用updateAppWidget()
当你需要做这样的事情时:

  • 获取远程视图对象
  • 设置新按钮图像
  • 在按钮上设置挂起的意图
  • 调用updateAppWidget()

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

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

AppWidgetManager-AppWidgetManager=AppWidgetManager.getInstance(上下文);
int[]appWidgetIds=appWidgetManager.getAppWidgetIds(新组件名(context,Widget.class));
RemoteView视图=新的RemoteView(context.getPackageName(),R.layout.widget_layout);
views.setViewVisibility(R.id.syncImage,View.VISIBLE);
对于(int i=0;i
如果您从两个位置更新,该怎么办。Aka
onreceive
OnUpdate
@doomsnight为什么会有不同?只需在这两个版本中正确更新即可。我不确定您的问题如何适用于此处提出的原始问题。因为我有两个不同的RemoteView更新。一个更新一半,另一个更新另一半。如果在最后一个RemoteView上刷新,那么它将只恢复我50%的数据。@Doomsnight我认为您需要单独提问,并提供一些示例代码。我没听懂你说的话。
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);
}