Отображение тегов элементов в ListView - PullRequest
1 голос
/ 14 февраля 2012

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

Используя JOIN, я извлек элементы и теги избазы данных.

item1 | tagA
item1 | tagB
item2 | tagC
item3 | tagB

Я много раз испробовал мусор, но это все, что было до сих пор ... барахло.

Даже если первые два элемента имеют одинаковую _id поле, элементы назначаются отдельным ListViews, я думаю, это связано с тем, что адаптер генерирует новый элемент списка для каждой записи в курсоре.Где-то я надеялся, что он попытается обновить записи списка такими же _id, что оставит мне простое решение - просто написать код в ViewBinder для добавления к тегу View в любое время, когда будет вызван setViewValue().

  1. Я рассмотрел ручное выполнение Cursor.moveToNext() в ViewBinder для добавления необходимого тега TextViews в мой ListView, если идентификаторы последующих Cursors совпадают.Это не полностью решило бы мою проблему, так как курсор действительного ListView не был бы затронут вызовом moveToNext() в ViewBinder (из-за всей передаваемой по значению вещи с аргументами).Первый элемент в Списке отображает все теги item1 | tagA, tagB, но следующий Курсор по-прежнему отображает уже отображенный item1 в item1 | tagB, поскольку Курсор адаптера не может быть изменен вызовом ViewBinder.
  2. Я рассмотрел написание / расширение объектов, и чтобы мой адаптер соединял точки (.eg: я передаю адаптер List<Item> (вместо курсора) и руку Item с методом public List<String> getTags() для простого извлечения теговза элемент. Список {Item {id = 1, tags = {tagA, tagB}}, Item {id = 2, tags = {tagC}}, Item {id = 3, tags = {tagB}}}Курсор настроен для заполнения Списка. Однако, чтобы сделать это, мне действительно нужно знать, что такое уборка Курсора, чтобы содержать вещи в чистоте.

По сути, я не хочу придумывать грязное решение.Могу поспорить, что некоторые из вас уже решали эту проблему где-то в прошлом. Как лучше всего подойти к этой проблеме?

...