D
D
Daniel Khaliulin2016-03-27 20:00:51
Java
Daniel Khaliulin, 2016-03-27 20:00:51

Why are items in ExpandableListView not grouped?

Good evening.
I can't figure out why the same collection of items is assigned to each group in the ExpandableListView?
Given:
1. An array of groups.
2. Arrays of elements that should be in groups.
3. An array of arrays of elements that should be in groups (the main array).
Algorithm:
1. Fill the collection from the array of groups.
2. Fill in separate collections from the main array from each internal array.
3. We add these collections to one large collection.
At the output, for some reason, each group has exactly the same set of elements. I would be very grateful for your help!

String[] groups = new String[] {"Первая группа", "Вторая группа"};
  String[] First = new String[] {"Один", "Два", "Три", "Четыре"};
        String[] Second = new String[] {"Пять", "Шесть", "Семь", "Восемь", "Девять"};
        String[] [] Themes = new String[] [] {First, Second};

        ArrayList<Map<String, String>> groupData;

        // коллекция для элементов одной группы
        ArrayList<Map<String, String>> childDataItem;

        // общая коллекция для коллекций элементов
        ArrayList<ArrayList<Map<String, String>>> childData;
        // в итоге получится childData = ArrayList<childDataItem>

        // список аттрибутов группы или элемента
        Map<String, String> m;

        // заполняем коллекцию групп из массива с названиями групп
        groupData = new ArrayList<Map<String, String>>();
        for (String group : groups) {
            // заполняем список аттрибутов для каждой группы
            m = new HashMap<String, String>();
            m.put("groupName", group); // имя компании
            groupData.add(m);
        }

        // список аттрибутов групп для чтения
        String groupFrom[] = new String[] {"groupName"};
        // список ID view-элементов, в которые будет помещены аттрибуты групп
        int groupTo[] = new int[] {R.id.theme_item};

        // создаем коллекцию для коллекций элементов
        childData = new ArrayList<ArrayList<Map<String, String>>>();

        childDataItem = new ArrayList<Map<String, String>>();

        for (int i = 0; i < 2; i++) {
            for (int j = 0; j < Themes[i].length; j++) {
                m = new HashMap<String, String>();
                m.put("subtheme", Themes[i][j]);
                childDataItem.add(m);
            }
            childData.add(childDataItem);
        }

        // список аттрибутов элементов для чтения
        String childFrom[] = new String[] {"subtheme"};
        // список ID view-элементов, в которые будет помещены аттрибуты элементов
        int childTo[] = new int[] {android.R.id.text1};

        SimpleExpandableListAdapter adapter = new SimpleExpandableListAdapter(
                getActivity(),
                groupData,
                R.layout.theme_item_title,
                groupFrom,
                groupTo,
                childData,
                android.R.layout.simple_list_item_1,
                childFrom,
                childTo);

        ExpandableListView elvMain;
        elvMain = (ExpandableListView) v.findViewById(R.id.elvMain);
        elvMain.setAdapter(adapter);

Answer the question

In order to leave comments, you need to log in

1 answer(s)
D
Denis Zagaevsky, 2016-03-27
@khaliulin

childDataItem must be created inside the loop (where you add this item to childData).

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question