Android ExpandableListView из базы данных - PullRequest
0 голосов
/ 18 марта 2012

Я хочу создать двухуровневый ExpandableListView из локальной базы данных.

Уровень группы, в которой я хочу получить имена из базы данных Таблица категорий

category_id | name
-------------------
    1       | NameOfCategory

требуемый дочерний уровеньчтобы получить имена из таблицы списка

list_id |   name   | foreign_category_id
--------------------------------
   1    | Listname |     1 

У меня есть метод в DatabaseDAO для получения всех значений из таблицы

public List<Category> getAllCategories()
{
    database = dbHelper.getReadableDatabase();
    List<Category> categories = new ArrayList<Category>();
    Cursor cursor = database.query(SQLiteHelper.TABLE_CATEGORY, null, null, null, null, null, null);

    cursor.moveToFirst();
    while(!cursor.isAfterLast())
    {
        Category category = cursorToCategory(cursor);
        categories.add(category);
        cursor.moveToNext();
    }
    cursor.close();

    return categories;
}

Теперь добавление имен на уровне группыэто легко сделать следующим образом:

ArrayList<String> groups;

for(Category c : databaseDao.getAllCategories())
            {
                groups.add(c.getName());
            }

Теперь я хочу добавить дочерние элементы в ExpandableListView в следующем массиве ArrayList<ArrayList<ArrayList<String>>> children;.

Как получитьдети под правильным именем группы? Я думаю, что это связано с groups.indexOf (), но в таблице списка у меня есть только внешний category_id, а не фактическое имя.

1 Ответ

2 голосов
/ 20 марта 2012

У меня есть следующее, что-то вроде работает сейчас.

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

public List<CategoryAndLists> getCategoryAndListNames()
{
    database = dbHelper.getReadableDatabase();
    List<CategoryAndLists> calList = new ArrayList<CategoryAndLists>();
    Cursor cursor = database.database.rawQuery("SELECT c.category_id, c.name, w.name FROM category AS c, lists AS w WHERE c.category_id = w.category_id ORDER BY c.category_id, w.name", null);

    cursor.moveToFirst();
    while(!cursor.isAfterLast())
    {
        CategoryAndLists categoryAndLists = new CategoryAndLists();
        categoryAndLists.setCategory(cursor.getString(0));
        categoryAndLists.setWishlist(cursor.getString(1));

        System.out.println(cursor.getString(0));
        System.out.println(cursor.getString(1));

        calList.add(categoryAndLists);

        cursor.moveToNext();
    }

    return calList;
}

И изменил метод loadData() на следующий:

private void loadData(){

        groups= new ArrayList<String>();
        children= new ArrayList<ArrayList<ArrayList<String>>>();

        int childrenIndex = 0;
        String lastCategory = "";


        for(Category c : databaseDao.getAllCategories())
        {
            if(!groups.contains(c.getName()))
            {
                groups.add(c.getName());
            }   
        }

        for(CategoryAndLists c : databaseDao.getCategoryAndListNames())
        {
            if(!children.contains(c.getWishlist()))
            {

                    if(lastCategory.equals(c.getCategory()))
                    {
                        childrenIndex++;
                        System.out.println("childrenIndex++ Called");
                    }
                    else
                    {
                        childrenIndex = 0;
                        System.out.println("childrenIndex = 0 Called");
                    } 

                //Get the groups ArrayList index id to add the children to
                int index = groups.indexOf(c.getCategory());

                System.out.println("INDEX CHILDRENINDEX: " +childrenIndex);

                children.add(new ArrayList<ArrayList<String>>());
                children.get(index).add(new ArrayList<String>());
                children.get(index).get(childrenIndex).add(c.getWishlist());

                childrenIndex++;
            }

        }

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

...