Хост-приложение виджета с настраиваемым представлением - onClick не запускается в виджете приложения - PullRequest
4 голосов
/ 11 марта 2010

Я пишу приложение, в котором будут размещаться виджеты.Приложение имеет пользовательский вид (который, вероятно, является источником проблемы).Я получаю 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 рисует его непосредственно на холст.Визуально все хорошо - я вижу реальный виджет.Но проблема в том, чтобы реагировать на события пользовательского интерфейса.Посоветуйте, пожалуйста, что нужно сделать в родительском представлении, чтобы правильно запускать обработчики в виджетах, таких как onClick ().

Примечания:

  1. Я использовал стандартные виджеты, которыенормально реагируют на события клика.Ничего не сработало.

  2. Я также создал свой собственный тестовый виджет со слушателем (через views.setOnClickPendingIntent (R.id.appwidget_text, pending);) и onClick () успешно срабатывает, если виджетдобавлен на домашний экран, но не работает в моем приложении.

  3. mView правильно обнаруживает событие нажатия, и я попытался вызвать там widget.performClick (), который возвращает ложное значение, а onClickListener - нетзарегистрирован в виджете.Но согласно источнику mAppWidgetHost.createView () будет вызывать updateAppWidget, который будет регистрировать его слушатель onClick ..

Пожалуйста, посоветуйте, где искать.Спасибо

1 Ответ

0 голосов
/ 13 июля 2010

Если ваш виджет не принадлежит реальной ViewGroup, которая принадлежит системе, вам нужно сделать setLocation () для сенсорных событий, чтобы выровнять их с тем, где должны быть виджеты. Если вы этого не сделаете, код View для определения того, какой View был затронут, не будет работать, поскольку значения X и Y будут неправильными (они должны быть относительно родительского View, а не абсолютными).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...