Виджеты: различают клики по представлениям с одинаковым идентификатором - PullRequest
0 голосов
/ 13 февраля 2012

У меня есть простой виджет домашнего экрана, который отображает список элементов. Поскольку я хочу поддерживать более старые устройства, вместо ListView я использую серию объектов TextView, которые «эмулируют» ListView.

Это работает очень хорошо, но я бы хотел назначить прослушиватель щелчков для этих элементов. В слушателе я хотел бы различать их и выполнять действие в зависимости от содержимого элемента.

Как это сделать? Поскольку setOnClickPendingIntent принимает идентификатор представления, я не могу назначить отдельные намерения для отдельных элементов - все они имеют один и тот же идентификатор, поэтому обработчик не будет знать, какой элемент был выбран. Я могу создавать экземпляры RemoteViews только из макета XML, поэтому не могу добавлять элементы с разными идентификаторами (мне нужно создать много файлов макетов, отличающихся только идентификатором макета).

Начиная с Honeycomb, существует метод setOnClickFillInIntent, который приемлемым образом решает мою проблему, но я не могу использовать его, если хочу, чтобы мой виджет работал на Gingerbread.

Ответы [ 2 ]

1 голос
/ 13 февраля 2012

Я не могу назначить отдельные намерения для отдельных элементов - все они имеют один и тот же идентификатор, поэтому обработчик не будет знать, какой элемент был нажат.

Ваши виджеты должны иметьуникальные идентификаторы.

Я могу создавать экземпляры RemoteViews только из макета XML, поэтому не могу добавлять элементы с разными идентификаторами

Конечно, вы можете.У вас есть один файл макета на размер виджета приложения (возможно, поэтому только один период файла макета, если вы поддерживаете только один размер).В этом файле макета вы даете своим виджетам уникальные идентификаторы.

0 голосов
/ 07 июня 2012

Возможно, вы сможете!У меня была та же проблема, но потом я понял, что я генерировал строки (отдельные строки в макете, каждая строка из одного и того же шаблона) по одной.У каждой строки были свои RemoteViews, поэтому в цикле for я ставил перед собой цель.Например, если я добавляю новые innerRemoteViews к outerRemoteViews, я бы вызвал:

innerRemoteViews.setOnClickPendingIntent(R.id.inner_row_template_id, PendingIntent.getActivity(context, 0, intent, 0));

Таким образом, Intent будет добавлен к innerRemoteViews, где идентификатор все еще специфичен для этой строки.

...