可能重复:
After orientation change buttons on a widget are not responding
我遇到一个appwidget的问题,在xml布局中有一个ImageView,我注册了一个在OnReceive方法中处理的pendingintent。 一切正常,直到我改变手机方向。此时窗口小部件不再工作了,我点击图像但是没有发生。 这个问题就像这里的问题: After orientation change buttons on a widget are not responding
问题是什么,如何解决? 感谢。
答案 0 :(得分:9)
我最终设法重建了OP的免服务解决方案。以下是记录的秘密:每次更新远程视图时,都必须更新所有更新的内容。我的应用程序正在更新一些可视元素,但不会再次设置按钮处理程序。这导致处理程序停止工作 - 不是直接 - 只是在轮换后才会发生混乱。
如果这样做是正确的,您不需要拦截配置更改广播,您设置的最后一个远程视图将在轮换后再次使用。您的AppWidgetProvider不需要调用。
答案 1 :(得分:2)
我有类似的问题,但我的应用程序现在运行良好,现在使用Alex提出的解决方案
“......在没有服务帮助的情况下解决了,只需重新设置 OnReceive方法中的setOnClickPendingIntent“
我跟踪了onReceive方法,并且每当我更改设备的方向时都会调用它,所以我再次调用onReceive方法上的widget的配置。
无论如何我不确定这是解决这个问题的最佳解决方案,如果有人知道更好的解决方案请分享。
感谢。
答案 2 :(得分:1)
每当您更新窗口小部件的外观(使用活动或广播接收器[应用小部件提供商])时,您还必须为点击处理程序重新分配所有PendingIntents,然后正常调用updateAppWidget()
。
setTextViewText()
的示例:
// This will update the Widget, but cause it to
// stop working after an orientation change.
updateWidget()
{
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
remoteViews.setTextViewText(R.id.widget_text_view, "Updated widget");
appWidgetManager.updateAppWidget(appWidgetId, remoteViews);
}
// This is the correct way to update the Widget,
// so that it works after orientation change.
updateWidget()
{
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
remoteViews.setTextViewText(R.id.widget_text_view, "Updated widget");
Intent intent = new Intent(context, MyWidgetActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, ...);
remoteViews.setOnClickPendingIntent(R.id.widget_click_button, pendingIntent);
appWidgetManager.updateAppWidget(appWidgetId, remoteViews);
}
答案 3 :(得分:0)