具有自定义视图的小部件主机应用程序 - 在应用程序小部件中未触发onClick

时间:2010-03-11 17:14:26

标签: android android-widget

我正在编写一个可托管小部件的应用。该应用程序具有自定义视图(可能是问题的来源)。我像这样获得了AppWidgetHostView

private AppWidgetHostView widget;
...
AppWidgetProviderInfo appWidgetInfo = mAppWidgetManager.getAppWidgetInfo(appWidgetId);
widget = mAppWidgetHost.createView(this, appWidgetId, appWidgetInfo); 
widget.setAppWidget(appWidgetId, appWidgetInfo);
mView.addWidget(widget, appWidgetInfo);

mView.addWidget()基本上只记得这个AppWidgetHostView实例,然后mView将它直接绘制到画布上。视觉上一切都很好 - 我可以看到实际的小部件。但问题在于对UI事件做出反应。请告知在父视图中需要完成的操作,以便正确触发小部件中的处理程序,如onClick()。

注意:

  1. 我使用的标准小部件通常会对点击事件做出反应。没有用。

  2. 我还使用侦听器创建了自己的测试窗口小部件(通过views.setOnClickPendingIntent(R.id.appwidget_text,pending);)如果在主屏幕上添加了窗口小部件,则会成功触发onClick(),但不会在我的应用程序中工作。

  3. mView正确检测到点击事件,我尝试在那里调用widget.performClick(),返回false意味着onClickListener未在窗口小部件中注册。但根据源mAppWidgetHost.createView()会调用updateAppWidget来注册它的onClick监听器..

  4. 请告知在哪里查看。感谢

1 个答案:

答案 0 :(得分:0)

如果您的窗口小部件不属于属于系统的真实ViewGroup,则需要对触摸事件执行setLocation()以使它们与窗口小部件的位置对齐。如果不这样做,用于查找被触摸的视图的查看代码将不起作用,因为X和Y值将是错误的(它们应该相对于父视图,而不是绝对的)。