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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.77
Severomor1
0 / 0 / 0
Регистрация: 09.01.2014
Сообщений: 36
#1

Обработка нажатия CheckBox в ListView - Программирование Android

22.04.2014, 13:53. Просмотров 3577. Ответов 31
Метки нет (Все метки)

Привет,
Есть ListView на основе BaseAdapter. Каждый элемент содержит TextView и несколько чекбоксов. Как обработать нажатие на конкретный CheckBox? onListItemClick при нажатие на чекбокс не вызывается.
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
22.04.2014, 14:53     Обработка нажатия CheckBox в ListView #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
сделайте класс
Java
1
2
3
4
5
6
7
8
private class MyListener implements CheckBox.OnCheckedChangeListener {
        @Override
        public void onCheckedChanged(CompoundButton view, boolean isChecked) {
            switch (view.getId()) {
                case ...
            }
        }
    }
и в getView ставьте на чекбоксы .setOn...(new MyListener());
Severomor1
0 / 0 / 0
Регистрация: 09.01.2014
Сообщений: 36
22.04.2014, 15:47  [ТС]     Обработка нажатия CheckBox в ListView #3
NiRamz, спасибо, работает!
Еще вопрос: это же получается, что на каждый CheckBox на экране будет создан new MyListener? Не многовато будет?
646kapeh064
59 / 58 / 15
Регистрация: 09.12.2013
Сообщений: 206
22.04.2014, 16:10     Обработка нажатия CheckBox в ListView #4
Severomor1, можешь создать один и привязать ко всем)
Java
1
2
3
4
5
6
MyListener listener = new MyListener();
// а тут привязываешь
.setOn...(listener);
.setOn...(listener);
.setOn...(listener);
.setOn...(listener);
Severomor1
0 / 0 / 0
Регистрация: 09.01.2014
Сообщений: 36
22.04.2014, 16:15  [ТС]     Обработка нажатия CheckBox в ListView #5
646kapeh064, я так и думал, но как тогда в listener определить позицию элемента ListView, в которой был нажат чекбокс?
646kapeh064
59 / 58 / 15
Регистрация: 09.12.2013
Сообщений: 206
22.04.2014, 16:20     Обработка нажатия CheckBox в ListView #6
Severomor1, а ты как определял до этого?
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
22.04.2014, 16:24     Обработка нажатия CheckBox в ListView #7
Цитата Сообщение от 646kapeh064 Посмотреть сообщение
можешь создать один и привязать ко всем)
не получится
Цитата Сообщение от Severomor1 Посмотреть сообщение
Еще вопрос: это же получается, что на каждый CheckBox на экране будет создан new MyListener? Не многовато будет?
не будет, вьюхи которые за пределами экрана убираются в кеш, далее при появлении на экране мы переопределяем листенера, а старый убьется сборщиком.
646kapeh064
59 / 58 / 15
Регистрация: 09.12.2013
Сообщений: 206
22.04.2014, 16:28     Обработка нажатия CheckBox в ListView #8
Цитата Сообщение от NiRamz Посмотреть сообщение
не получится
Почему не получится? По всем законам Java это логичная операция.
Тем-более, в твоем коде:
Java
1
2
3
4
5
6
7
8
private class MyListener implements CheckBox.OnCheckedChangeListener {
        @Override
        public void onCheckedChanged(CompoundButton view, boolean isChecked) {
            switch (view.getId()) { // Вот тут : )
                case ...
            }
        }
    }
ты предусмотрел такой вариант идентификации объекта
Severomor1
0 / 0 / 0
Регистрация: 09.01.2014
Сообщений: 36
22.04.2014, 16:31  [ТС]     Обработка нажатия CheckBox в ListView #9
Цитата Сообщение от 646kapeh064 Посмотреть сообщение
Severomor1, а ты как определял до этого?
Ах да, из getView же можно взять.
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
22.04.2014, 16:32     Обработка нажатия CheckBox в ListView #10
уверены?
будет 10 элементов в списке, в каждом из них будет вьюха с идентификатором text, как вы определите на какую именно было нажато?
Да, можно по другому, но этот более правильный.
646kapeh064
59 / 58 / 15
Регистрация: 09.12.2013
Сообщений: 206
22.04.2014, 16:36     Обработка нажатия CheckBox в ListView #11
Цитата Сообщение от NiRamz Посмотреть сообщение
в каждом из них будет вьюха с идентификатором text, как вы определите на какую именно было нажато?
Действительно... архитектура в андроиде странная. Забыл про это.

Ну ладно хоть до самого View можно достучаться из события и кастовать его к нужному типу, например к CheckBox
Severomor1
0 / 0 / 0
Регистрация: 09.01.2014
Сообщений: 36
22.04.2014, 16:37  [ТС]     Обработка нажатия CheckBox в ListView #12
Цитата Сообщение от NiRamz Посмотреть сообщение
будет 10 элементов в списке, в каждом из них будет вьюха с идентификатором text, как вы определите на какую именно было нажато?
Конкретный чекбокс в элементе определяем по getId, а номер элемента возьмем из getView, не?
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
22.04.2014, 16:45     Обработка нажатия CheckBox в ListView #13
getView вызывается в цикле при заполнении списка, вы оттуда никак не сможете достать позицию нужного элемента. Я вам говорю как нужно сделать, хотя если хотите извратиться можете сделать так:
назначить на список onTouchListener, при срабатывании вытаскивать координаты касания, далее в цикле прогонять вьюхи списка и проверять на пересечение, получите позицию вьюхи (!!!) в списке, далее к первому видимому элементу прибавляем это количество и вуаля, у вас есть позиция нужная.
Можно так же ставить позицию через setTag().

Это первое что пришло в голову из извращенных вариантов
Severomor1
0 / 0 / 0
Регистрация: 09.01.2014
Сообщений: 36
22.04.2014, 16:50  [ТС]     Обработка нажатия CheckBox в ListView #14
Цитата Сообщение от NiRamz Посмотреть сообщение
getView вызывается в цикле при заполнении списка, вы оттуда никак не сможете достать позицию нужного элемента.
Мммм... хорошо, а в Вашем варианте я ее откуда возьму? Номер конкретного чекбокса из view.getId, а номер элемента в списке?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.04.2014, 17:26     Обработка нажатия CheckBox в ListView
Еще ссылки по теме:
Кнопка в listView и обработчик нажатия Android
Обработка checkbox'ов Android
Обработка нажатия EditText Android
Android Обработка нажатия кнопок
Обработка нажатия на RadioButton Android

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

Или воспользуйтесь поиском по форуму:
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
22.04.2014, 17:26     Обработка нажатия CheckBox в ListView #15
можете в конструктор класса передавать позицию.
Yandex
Объявления
22.04.2014, 17:26     Обработка нажатия CheckBox в ListView
Ответ Создать тему
Опции темы

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