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

Кастомный ExpandableListView - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Хранение переменных http://www.cyberforum.ru/android-dev/thread1730034.html
Доброго времени суток, уважаемые. Имеется около сотни переменных (не больше) которые будут изменяться раз 10-20 в день. Многие из них зависят друг от друга, т.е. при изменении одной - меняются значения нескольких других. Сейчас они хранятся просто в памяти которая выделяется при запуске приложения. Но хочется обезопасить себя на случай краша или от какой-то программы по очистке оперативной...
Программирование Android Как передать данные из Fragments в DialogFragment Пробовал с помощью Intent , Bundle , но не получалось (либо руки кривые) . Поможете? http://www.cyberforum.ru/android-dev/thread1730025.html
Программирование Android LDPI MDPI HDPI и прочая хрень
Как, где и в каком формате правильно рисовать элементы под андроид приложение. И как определять размер элементов под разную плотность экрана?
Программирование Android Таблицы , работа с JAVA, Eclipse, Heroku)
Всем доброго времени суток!))) Ребят такой вопрос, точнее просьба о помощи. У меня осталось очень мало времени, я немножко опаздываю и мне нужна помощь.)))) Я создаю приложение для андройда, приложение связанно с расписанием занятий. Само приложение почти дописал, но что касается серверной части для андройда, ещё не разу не делал.(((( Мне было поставлено условие, Сервер должен быть написан на...
Программирование Android Конструктор http://www.cyberforum.ru/android-dev/thread1729804.html
Ругается на конструктор. Как понял что передается null Ошибка FATAL EXCEPTION: main Process: com.diplom.sportclub, PID: 8820 java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.diplom.sportclub/com.diplom.sportclub.MainActivity}:...
Программирование Android Ошибки в Apktool при компиляции (сборке) проекта пишет что-то про директорию brut.directory.PathNotExist: apktool.yml подробнее

Показать сообщение отдельно
XlorD59
1 / 1 / 0
Регистрация: 28.05.2013
Сообщений: 50

Кастомный ExpandableListView - Программирование Android

09.05.2016, 10:42. Просмотров 164. Ответов 0
Метки (Все метки)

День добрый.
Пытаюсь реализовать свой ExpandableListView.

Цель - сделать трехуровневый список для выбора стран и регионов.

Структура примерно такая:

Java
1
2
3
4
5
6
7
8
-Европа
--Польша
--Германия
---Центральная
---Северная
-Азия
--Китай
--Япония
У стран и их частей (у центр Цермании, у самой Германии и тд) должны быть чекбоксы. Причем, при выборе целой страны, её регионы отмечаются автоматически.

Я написал два своих адаптера.
Получается два ExpandableListView вложенных друг в друга - один отвечает за список регионов, второй - за список стран и их частей.

В макетах стран и регионов находится RelativeLayout с одним TextView.

Адаптер для регионов:

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
public class RegionsAdapter extends BaseExpandableListAdapter {
 
    private List<Object> objects;
    private Activity activity;
    private LayoutInflater inflater;
 
    public RegionsAdapter(Activity activity, List<Object> objects) {
        this.objects = objects;
        this.activity = activity;
        this.inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }
 
    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return objects.get(groupPosition).getObjects().get(childPosition);
    }
 
    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return childPosition;
    }
 
    @Override
    public View getChildView(int groupPosition, int childPosition,
                             boolean isLastChild, View convertView, ViewGroup parent) {
 
        Object object = (Object) getChild(groupPosition, childPosition);
        CustomExpandableListView subObjects = (CustomExpandableListView) convertView;
 
        if (convertView == null) {
            subObjects = new CustomExpandableListView(activity);
        }
        CountriesAdapter adapter = new CountriesAdapter(activity, object);
        subObjects.setAdapter(adapter);
 
        return subObjects;
    }
 
    @Override
    public int getChildrenCount(int groupPosition) {
        return objects.get(groupPosition).getObjects().size();
    }
 
    @Override
    public Object getGroup(int groupPosition) {
        return objects.get(groupPosition);
    }
 
    @Override
    public int getGroupCount() {
        return objects.size();
    }
 
    @Override
    public long getGroupId(int groupPosition) {
        return groupPosition;
    }
 
    @Override
    public View getGroupView(int groupPosition, boolean isExpanded,
                             View convertView, ViewGroup parent) {
 
        Object object = (Object) getGroup(groupPosition);
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.layout_region_item, null);
        }
 
        TextView name = (TextView) convertView.findViewById(R.id.name);
        name.setText(object.getName());
 
        return convertView;
    }
 
    @Override
    public boolean hasStableIds() {
        return true;
    }
 
    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return true;
    }
}
Адаптер для стран и их частей:

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
public class CountriesAdapter extends BaseExpandableListAdapter {
 
    private Object object;
    private LayoutInflater inflater;
    private Activity activity;
 
    public CountriesAdapter(Activity activity, Object object) {
        this.activity = activity;
        this.object = object;
        this.inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }
 
    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return object.getObjects().get(childPosition);
    }
 
    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return childPosition;
    }
 
    @Override
    public View getChildView(int groupPosition, int childPosition,
                             boolean isLastChild, View convertView, ViewGroup parent) {
 
        Object object = (Object) getChild(0, childPosition);
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.layout_country_item, null);
 
            Resources r = activity.getResources();
            float px40 = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40, r.getDisplayMetrics());
            convertView.setPadding(
                    convertView.getPaddingLeft() + (int) px40,
                    convertView.getPaddingTop(),
                    convertView.getPaddingRight(),
                    convertView.getPaddingBottom());
        }
 
        TextView name = (TextView) convertView.findViewById(R.id.name);
        name.setText(object.getName());
 
        return convertView;
    }
 
    @Override
    public int getChildrenCount(int groupPosition) {
 
        if (object.getObjects() == null) {
            return 0;
        }
        return object.getObjects().size();
    }
 
    @Override
    public Object getGroup(int groupPosition) {
        return object;
    }
 
    @Override
    public int getGroupCount() {
        return 1;
    }
 
    @Override
    public long getGroupId(int groupPosition) {
        return groupPosition;
    }
 
    @Override
    public View getGroupView(int groupPosition, boolean isExpanded,
                             View convertView, ViewGroup parent) {
 
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.layout_country_item, null);
            Resources r = activity.getResources();
            float px20 = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 20, r.getDisplayMetrics());
            convertView.setPadding(
                    convertView.getPaddingLeft() + (int) px20,
                    convertView.getPaddingTop(),
                    convertView.getPaddingRight(),
                    convertView.getPaddingBottom());
        }
 
        TextView name = (TextView) convertView.findViewById(R.id.name);
        name.setText(object.getName());
 
        return convertView;
    }
 
    @Override
    public boolean hasStableIds() {
        return true;
    }
 
    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return true;
    }
}
И свой ExpandableListView:

Java
1
2
3
4
5
6
7
8
9
10
11
12
public class CustomExpandableListView extends ExpandableListView {
 
    public CustomExpandableListView(Context context) {
        super(context);
    }
 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        widthMeasureSpec = MeasureSpec.makeMeasureSpec(960, MeasureSpec.AT_MOST);
        heightMeasureSpec = MeasureSpec.makeMeasureSpec(600, MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }
}
Выглядит все это как-то так:
Кастомный ExpandableListView Кастомный ExpandableListView

Проблема в том, что если я заменю в макете стран TextView на CheckBox, и присвою этому CheckBox текст, то список стран перестанет раскрываться. Я не понимаю почему так происходит, может кто объяснить?

И ещё, не могу понять почему мой итоговый список не хочет разворачиваться на весь экран по вертикали - использует только где-то треть (на первом скрине видно, что нижние элементы исчезли).
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru