Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
we2seek
75 / 75 / 17
Регистрация: 25.01.2010
Сообщений: 359
#1

Custom ExpandableListView перемешиваются группы - Android

11.09.2014, 01:15. Просмотров 476. Ответов 2
Метки нет (Все метки)

Пытаюсь создать свой раскрывающийся список с текстом и плюшками.
Все вроде ок, кроме одного момента: при раскрытии группы соседние перемешиваются.
Вот как это выглядит до раскрытия группы:
Custom ExpandableListView перемешиваются группы
и после:
Custom ExpandableListView перемешиваются группы

Код адаптера:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
public class ExpLstAdapter extends BaseExpandableListAdapter {
 
    private Context context;
    private ArrayList<Group> groups;
 
    public ExpLstAdapter(Context context, ArrayList<Group> groups) {
        super();
        this.context = context;
        this.groups = groups;
    }
 
    @Override
    public int getGroupCount() {
        return groups.size();
    }
 
    @Override
    public int getChildrenCount(int groupPosition) {
        ArrayList<Child> chList = groups.get(groupPosition).getItems();
        return chList.size();
    }
 
    @Override
    public Object getGroup(int groupPosition) {
        return groups.get(groupPosition);
    }
 
    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return groups.get(groupPosition).getItems().get(childPosition);
    }
 
    @Override
    public long getGroupId(int groupPosition) {
        // TODO
        return 0L;
    }
 
    @Override
    public long getChildId(int groupPosition, int childPosition) {
        // TODO
        return 0L;
    }
 
    @Override
    public boolean hasStableIds() {
        return false;
    }
 
    @Override
    public View getGroupView(int groupPosition, boolean isExpanded,
            View convertView, ViewGroup parent) {
 
        Group group = (Group) getGroup(groupPosition);
        if (convertView == null) {
            LayoutInflater inflater = (LayoutInflater) context
                    .getSystemService(context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.group_item, null);
            ((TextView) convertView.findViewById(R.id.txtGroupName))
                    .setText(group.getName());
            ((TextView) convertView.findViewById(R.id.txtGroupCapacity))
                    .setText(Integer.toString(groups.get(groupPosition)
                            .getItems().size()));
        }
        return convertView;
    }
 
    @Override
    public View getChildView(final int groupPosition, final int childPosition,
            boolean isLastChild, View convertView, ViewGroup parent) {
        final Child child = (Child) getChild(groupPosition, childPosition);
        if (convertView == null) {
            LayoutInflater infalInflater = (LayoutInflater) context
                    .getSystemService(context.LAYOUT_INFLATER_SERVICE);
            convertView = infalInflater.inflate(R.layout.child_item, null);
        }
 
        TextView tv = (TextView) convertView.findViewById(R.id.txtName);
        tv.setText(child.getName());
 
        ImageView ivGender = (ImageView) convertView
                .findViewById(R.id.imageGender);
        if (child.isMale()) {
            ivGender.setImageResource(R.drawable.male);
        } else {
            ivGender.setImageResource(R.drawable.female);
        }
        ImageView ivCard = (ImageView) convertView.findViewById(R.id.imageCard);
        if (child.hasCard()) {
            ivCard.setImageResource(android.R.drawable.btn_star_big_on);
        } else {
            ivCard.setImageResource(android.R.drawable.btn_star_big_off);
        }
 
        convertView.setOnClickListener(new OnClickListener() {
 
            @Override
            public void onClick(View view) {
                Toast.makeText(context, showGroup(groupPosition), Toast.LENGTH_SHORT)
                        .show();
            }
        });
 
        return convertView;
    }
 
    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return true;
    }
 
    private String showGroups() {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < groups.size(); i++) {
            sb.append(groups.get(i).toString());
        }
        return sb.toString();
    }
    
    private String showGroup(int groupPosition){
        return groups.get(groupPosition).toString();
    }
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.09.2014, 01:15     Custom ExpandableListView перемешиваются группы
Посмотрите здесь:

Android Прослушать ExpandableListView
Android ExpandableListView
Обработчик нажатия в ExpandableListView Android
Android Как добавить view в конец списка группы expandablelistview
Android ExpandableListView на разных API
Android Expandablelistview совместно с listview
Android ExpandableListView не скролит
ExpandableListView Android
OnClick ExpandableListView Android
Android ExpandableListView настройка item
Идентификация элементов в ExpandableListView Android
ExpandableListView внутри ListFragment Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
YuraAAA
1564 / 1306 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
11.09.2014, 11:01     Custom ExpandableListView перемешиваются группы #2
Цитата Сообщение от we2seek Посмотреть сообщение
@Override
* * public long getGroupId(int groupPosition) {
* * * * // TODO
* * * * return 0L;
* * }
return groupPosition;

Цитата Сообщение от we2seek Посмотреть сообщение
@Override
* * public long getChildId(int groupPosition, int childPosition) {
* * * * // TODO
* * * * return 0L;
* * }
return groupPosition + childPosition;
we2seek
75 / 75 / 17
Регистрация: 25.01.2010
Сообщений: 359
11.09.2014, 16:21  [ТС]     Custom ExpandableListView перемешиваются группы #3
YuraAAA, не, это не то. У меня так и было указано в начале. Это я потом уже начал экспериментировать...
Кажется проблема была здесь:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public View getGroupView(int groupPosition, boolean isExpanded,
            View convertView, ViewGroup parent) {
 
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.group_item, parent, false);
        }
 
        // set category name as tag so view can be found view later
        convertView.setTag(getGroup(groupPosition).toString());
 
        TextView txtGroupName = (TextView) convertView
                .findViewById(R.id.txtGroupName);
        txtGroupName.setText(getGroup(groupPosition).toString());
 
        TextView txtGroupCapacity = (TextView) convertView
                .findViewById(R.id.txtGroupCapacity);
        txtGroupCapacity.setText(Integer
                .toString(getChildrenCount(groupPosition)));
 
        return convertView;
    }
и здесь:
Java
1
2
3
4
@Override
    public Object getGroup(int groupPosition) {
        return mParent.get(groupPosition).getName();
    }
Yandex
Объявления
11.09.2014, 16:21     Custom ExpandableListView перемешиваются группы
Ответ Создать тему
Опции темы

Текущее время: 00:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru