#android #sqlite #cursor
#Android #sqlite ( код ) #курсор #sqlite
Вопрос:
Добрый вечер (для меня), я Эмануэле, молодой разработчик Android. Я хочу поделиться с вами своей проблемой, потому что я не нахожу хорошего решения.
У меня есть 3 таблицы (на самом деле 5)
posts
categories
posts_categories
для создания отношения «многие ко многим» между публикациями и категориями
Я создал фрагмент списка, чтобы показывать все мои сообщения с их категориями.
Итак, я создал этот запрос (я не пишу весь код :))
SELECT posts._id, posts.post_title, categories.category_name
FROM posts
LEFT OUTER JOIN posts_categories
ON posts_categories.post_id=posts.post_id
LEFT OUTER JOIN categories
ON posts_categories.category_id=categories.category_id;
Итак, если у меня есть 2 сообщения с 2 категориями в каждом, этот запрос вернет 4 записи. Я ошибаюсь?
Итак, в моем курсоре у меня есть 4 записи, но что мне действительно нужно, так это собирать данные из курсора и отображать только то, что мне действительно нужно.
В этом случае я не могу использовать CursorAdapter для отображения моих данных, потому что он вставит 4 элемента в ListFragment.
И я не хочу загружать только post, а затем для каждой категории загрузки post, потому что, если у меня будет 100 сообщений, я выполню 1 запрос для выбора всех сообщений и 100 запросов для выбора категорий.
Что я могу сделать? Мне нужен совет эксперта! Каков наилучший способ справиться с этой ситуацией? Вы когда-нибудь сталкивались с этой проблемой?
Большое вам спасибо. Emanuele Ricci.
Комментарии:
1. Есть решение: ВЫБЕРИТЕ posts._id, posts.title, GROUP_CONCAT(tags._id) В КАЧЕСТВЕ tags_id, GROUP_CONCAT(tags.tag_name) В КАЧЕСТВЕ tags_name ИЗ posts, ОСТАВЛЕННЫХ ВНЕШНИМИ тегами ОБЪЕДИНЕНИЯ posts_tags В posts_tags.post_id=posts.post_id, ОСТАВЛЕННЫХ ВНЕШНИМИ тегами ОБЪЕДИНЕНИЯ posts_tags.tag_id=tags.tag_id ГРУППЫ ПО posts._id; Пожалуйста, адаптируйте запрос к вашей проблеме 🙂 Вы можете найти документацию SQLite о concat (x) и concat (x, разделитель) здесь: sqlite.org/lang_aggfunc.html В любом случае, вы также можете следить за моей проблемой в группе Google: groups.google.com/d/topic/android-developers/x1r2U8epi4Y /…
Ответ №1:
Я предлагаю вам расширить ArrayAdapter и предоставить вашему собственному ArrayList свой собственный объект для каждого результата в вашем списке. ArrayAdapter предоставляет функцию с именем getView(), которую следует переопределить и настроить для расширения и отображения того, что вам нужно. Это должно быть все, что вам нужно.
Комментарии:
1. Найдено решение: комментарий к моему первому сообщению 🙂
Ответ №2:
Вы пробовали CursorAdapter с Filterable. Вот [ссылка] (http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/AutoComplete4.html). Надеюсь, это поможет.
Комментарии:
1. Найдено решение: комментарий к моему первому сообщению 🙂 В любом случае, спасибо, я загляну в Filtrable 🙂