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