@khaliulin

Почему элементы в ExpandableListView не распределяются по группам?

Добрый вечер.

Не могу понять, почему для каждой группы в ExpandableListView назначается одна и та же коллекция элементов?

Дано:
1. Массив групп.
2. Массивы элементов, которые должны быть в группах.
3. Массив массивов элементов, которые должны быть в группах (главный массив).

Алгоритм:
1. Заполняем коллекцию из массива групп.
2. Из главного массива из каждого внутреннего массива заполняем отдельные коллекции.
3. Добавляем эти коллекции в одну большую коллекцию.

На выходе почему-то в каждой группе совершенно одинаковый набор элементов. Буду весьма благодарен за помощь!

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);
  • Вопрос задан
  • 172 просмотра
Решения вопроса 1
zagayevskiy
@zagayevskiy Куратор тега Java
Android developer at Yandex
childDataItem нужно создавать внутри цикла (того, где вы этот айтем добавляете в childData).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы