小部件上的方向更改按钮没有响应后[重复]

Posted

技术标签:

【中文标题】小部件上的方向更改按钮没有响应后[重复]【英文标题】:After orientation change buttons on a widget are not responding [duplicate] 【发布时间】:2011-06-02 05:21:23 【问题描述】:

可能重复: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

什么是问题以及如何解决? 谢谢。

【问题讨论】:

您好,我回答了您在发布的链接中发现的问题。当您旋转屏幕时,它会导致重新创建小部件。重新创建小部件时,您需要重新绑定点击处理程序 - 即。再次附加未决的点击事件。这就是该服务适用于这种情况的原因。它捕获 onConfigurationChanged 事件并将处理程序重新绑定到 ui 组件。 谢谢,在没有服务帮助的情况下解决了,只是在OnReceive方法中重新设置了setOnClickPendingIntent。 你能告诉我们你是如何调用 onReceive() 来改变方向的吗?我有同样的问题,但我的 AppWidgetProvider.onReceive() 没有被调用这个事件。 没关系:解决了它(记录在下面)。 【参考方案1】:

我最终设法重新创建了 OP 的免服务解决方案。这是记录的秘密:每次更新远程视图时,都必须更新您曾经更新的所有内容。我的应用程序正在更新一些视觉元素,但没有再次设置按钮处理程序。这导致处理程序停止工作 - 不是立即 - 仅在旋转更改后,因此造成混乱。

如果这样做正确,您不需要拦截配置更改广播,您设置的最后一个远程视图将在轮换后再次使用。无需调用您的 AppWidgetProvider。

【讨论】:

【参考方案2】:

我遇到了类似的问题,但我的应用现在使用 Alex 建议的解决方案运行良好

"...在没有服务帮助的情况下解决,只需重新设置 OnReceive 方法中的 setOnClickPendingIntent"

我跟踪了 onReceive 方法,每次我更改设备的方向时都会调用它,所以我再次在 onReceive 方法上调用了我的小部件的配置。

无论如何我不确定这是解决该问题的最佳解决方案,如果有人知道更好的解决方案,请分享。

谢谢。

【讨论】:

【参考方案3】:

每当您更新小部件的外观时(使用 Activity 或广播接收器 [应用小部件提供者]),您还必须为点击处理程序重新分配所有 PendingIntent,然后像往常一样调用 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);

【讨论】:

【参考方案4】:

请参阅此处了解可能的解释,或进一步尝试:

http://permalink.gmane.org/gmane.comp.handhelds.android.devel/98008

http://groups.google.com/group/android-developers/browse_thread/thread/578a4429c369c27c/273a53a96ddd10c5?lnk=gst&q=Widget+does+not+respond+when+phone+orientation+changes#273a53a96ddd10c5

但目前还不清楚真正的解决方案是什么。

【讨论】:

以上是关于小部件上的方向更改按钮没有响应后[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Google Maps v2 - onclick 监听器在方向更改后没有响应

三元条件没有重建我的小部件 - Flutter

QWidget 在鼠标按下事件后没有响应。

更改 WooCommerce 迷你购物车小部件上的购物车和结帐按钮链接

在android活动中嵌入小部件 - 没有响应

可编辑的小部件在 jQuery tablesorter 中没有响应