在方向更改按钮后,窗口小部件没有响应

时间:2011-01-01 12:34:37

标签: android button android-widget screen-orientation

  

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

问题是什么,如何解决? 感谢。

4 个答案:

答案 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)