Получение данных из разных таблиц SQLite в Android?

Мне было интересно, есть ли у меня такая ситуация:

  • В нашей базе данных SQLite есть несколько таблиц (скажем, четыре). каждая таблица состоит из двух столбцов: Title and Content.
  • Мы получили заголовки из всех четырех таблиц и отобразили их в одной ListView.

Возникает вопрос: как мы можем обрабатывать onItemClickListener, чтобы мы могли получить Content выбранного элемента, учитывая, что элементы находятся в разных таблицах?

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

Спасибо.


person iTurki    schedule 10.07.2011    source источник
comment
Итак, вы хотите знать, из какой таблицы пришел элемент?   -  person Nicklas A.    schedule 10.07.2011
comment
Итак, если я понимаю, проблема в том, что у вас есть элементы из разных таблиц, и когда вы выбираете, вы должны определить, из какой таблицы это?   -  person Mojo Risin    schedule 10.07.2011
comment
Именно вы оба. Чтобы получить соответствующий Контент   -  person iTurki    schedule 10.07.2011


Ответы (2)


Я бы сказал, используйте ArrayAdapter и оберните данные в пользовательский класс. который содержит таблицу, из которой он был получен (и идентификатор и т. д., если он вам нужен), тогда вы можете получить идентификатор и таблицу, просто зная индекс в списке.

Класс может выглядеть примерно так:

public static class ListItem {
    public String title, table;
    // Maybe include these as well?
    public String content;
    public int id;

    @Override
    public String toString() {
        return title; // Or something else maybe?
    }
}

Затем просто соберите данные из курсоров в ListItem[] и создайте адаптер следующим образом:
new ArrayAdapter<ListItem>(data);

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

person Nicklas A.    schedule 10.07.2011
comment
Я не понял, что вы имеете в виду под build your data from the cursors into a ListItem[] . Вы можете объяснить? - person iTurki; 10.07.2011
comment
Вы читаете кучу курсоров из своей таблицы, используя execSql, вы перебираете все четыре (по одному для каждой таблицы), добавляя каждую запись в массив. - person Nicklas A.; 10.07.2011
comment
Это кажется милым. Я надеюсь, что я не буду запасаться этим :). Спасибо - person iTurki; 10.07.2011

Решение, предложенное Никласом А., поможет. Но если у вас есть одинаковые предметы, почему вы держите их в 4 разных таблицах? Если ваши элементы идентичны, лучше сохранить их в таблице знаков и просто добавить дополнительный столбец для их идентификации, если это необходимо. Если ваши элементы не идентичны, создайте 4 класса моделей для каждого из них и обработайте onItemClicked в каждой модели.

person Mojo Risin    schedule 10.07.2011