Android Spinner и ListView со всем элементом - PullRequest
0 голосов
/ 23 марта 2012

Helo.

У меня есть следующее требование:

У меня есть список (ListView или Spinner зависит от ориентации), который показывает все проекты в базе данных. Этот список работает как фильтр для подробного списка данных, связанных с проектом. Это прекрасно работает (я использую Loader и ContentProvider для получения данных). Список проектов и список деталей реализованы в виде отдельных фрагментов и взаимодействуют через интерфейс onProjectSelectedListener.

Мое требование: мне нужно «ВСЕ» в качестве первого элемента списка, чтобы отключить фильтр и показать все данные (без фильтра проекта). Как я могу это понять (SQLite или Android-решение приветствуются). Лучшее, что я получу от элемента - выбрал конкретный идентификатор (например, -100) для элемента "ВСЕ".

Теперь

Project 1 (id: 1)
Project 2 (id: 2)
Project 3 (id: 3)
...

Обязательно

ALL Projects (id: -100)
Project 1 (id: 1)
Project 2 (id: 2)
Project 3 (id: 3)
...

Ответы [ 2 ]

1 голос
/ 23 марта 2012

Как насчет использования MergeAdapter для комбинирования вашего текущего CursorAdapter (я полагаю?) И нового ArrayAdapter<String>, который имеет опцию "Все"?

Вы можете реагировать на события кликов и т. Д., Просто увеличив MergeAdapter вместо текущего Adapter.

0 голосов
/ 10 апреля 2012

Я решил проблему с представлением объединения в базе данных SQLite.

CREATE
    VIEW all_projects AS
SELECT
    -100                    AS _id,
    'ALL'                   AS pj_name,
    'All Projects'          AS pj_comment,
    1                       AS pj_is_active,
    1                       AS pj_all
UNION
SELECT
    *,
    1                       AS pj_all
FROM
    projects

Поставщик контента делает выбор в представлении, если , где в операторе есть столбец "pj_all" и на табеле, если нет.

if (!TextUtils.isEmpty(where) && where.contains(COLUMN_WITH_ALL)) {
    queryBuilder.setTables(VIEW_ALL);
}
else {
    queryBuilder.setTables(TABLE_NAME);
}
...