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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.77
Severomor1
0 / 0 / 0
Регистрация: 09.01.2014
Сообщений: 36
22.04.2014, 13:53     Обработка нажатия CheckBox в ListView #1
Привет,
Есть ListView на основе BaseAdapter. Каждый элемент содержит TextView и несколько чекбоксов. Как обработать нажатие на конкретный CheckBox? onListItemClick при нажатие на чекбокс не вызывается.
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NiRamz
210 / 210 / 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
 Аватар для 646kapeh064
59 / 58 / 15
Регистрация: 09.12.2013
Сообщений: 208
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
 Аватар для 646kapeh064
59 / 58 / 15
Регистрация: 09.12.2013
Сообщений: 208
22.04.2014, 16:20     Обработка нажатия CheckBox в ListView #6
Severomor1, а ты как определял до этого?
NiRamz
210 / 210 / 16
Регистрация: 26.12.2010
Сообщений: 691
22.04.2014, 16:24     Обработка нажатия CheckBox в ListView #7
Цитата Сообщение от 646kapeh064 Посмотреть сообщение
можешь создать один и привязать ко всем)
не получится
Цитата Сообщение от Severomor1 Посмотреть сообщение
Еще вопрос: это же получается, что на каждый CheckBox на экране будет создан new MyListener? Не многовато будет?
не будет, вьюхи которые за пределами экрана убираются в кеш, далее при появлении на экране мы переопределяем листенера, а старый убьется сборщиком.
646kapeh064
 Аватар для 646kapeh064
59 / 58 / 15
Регистрация: 09.12.2013
Сообщений: 208
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
210 / 210 / 16
Регистрация: 26.12.2010
Сообщений: 691
22.04.2014, 16:32     Обработка нажатия CheckBox в ListView #10
уверены?
будет 10 элементов в списке, в каждом из них будет вьюха с идентификатором text, как вы определите на какую именно было нажато?
Да, можно по другому, но этот более правильный.
646kapeh064
 Аватар для 646kapeh064
59 / 58 / 15
Регистрация: 09.12.2013
Сообщений: 208
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
210 / 210 / 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, а номер элемента в списке?
NiRamz
210 / 210 / 16
Регистрация: 26.12.2010
Сообщений: 691
22.04.2014, 17:26     Обработка нажатия CheckBox в ListView #15
можете в конструктор класса передавать позицию.
Severomor1
0 / 0 / 0
Регистрация: 09.01.2014
Сообщений: 36
23.04.2014, 10:20  [ТС]     Обработка нажатия CheckBox в ListView #16
Цитата Сообщение от NiRamz Посмотреть сообщение
можете в конструктор класса передавать позицию.
А откуда ее взять? Городить огород с onTouchListener?

Добавлено через 6 минут
Цитата Сообщение от Severomor1 Посмотреть сообщение
А откуда ее взять? Городить огород с onTouchListener?
А, можно же в getView сделать к чекбоксам setTag с позицией, а в листенере геттагом получить!
NiRamz
210 / 210 / 16
Регистрация: 26.12.2010
Сообщений: 691
23.04.2014, 10:42     Обработка нажатия CheckBox в ListView #17
вы листенер выставляете в getView, оттуда же в конструктор передаете позицию

Добавлено через 52 секунды
в теги лучше ставить ViewHolder'ы, при большом списке будет меньше тормозов
MonsterNya
0 / 0 / 0
Регистрация: 04.03.2014
Сообщений: 27
23.04.2014, 14:28     Обработка нажатия CheckBox в ListView #18
Приветствую всех! Возник аналогичный тематический вопрос, имеется ListView и SimpleCursorAdapter, в ListView несколько TextView и CheckedTextView (RadioButton). Обрабатываю нажатие на строку списка и делаю дальнейшие действия, соответственно обработать нажатие на CheckedTextView невозможно(?), т.к. обрабатывается нажатие на строку целиком, значит надо вынести CheckedTextView из строки. Создал дополнительный ListView для CheckedTextView, но получил несоответствие высоты строк. Как можно решить проблему несоответствия высоты строк или как создать в одном ListView две кликабельные колонки? Tablelayout не предлагать, т.к. надо переделывать слишком много кода.
kirawa
33 / 33 / 1
Регистрация: 12.11.2013
Сообщений: 336
23.04.2014, 16:03     Обработка нажатия CheckBox в ListView #19
MonsterNya ты ваще не то делаешь я те скажу CheckedTextView это епты готовое решение, делай сам все епты почитай про listview там BaseAdapter
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.04.2014, 16:10     Обработка нажатия CheckBox в ListView
Еще ссылки по теме:

Кнопка в listView и обработчик нажатия Android
Обработка длительного нажатия Android
Обработка нажатия кнопок Android
Android Обработка длительного нажатия
Android Обработка нажатия кнопок

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

Или воспользуйтесь поиском по форуму:
NiRamz
210 / 210 / 16
Регистрация: 26.12.2010
Сообщений: 691
23.04.2014, 16:10     Обработка нажатия CheckBox в ListView #20
Цитата Сообщение от kirawa Посмотреть сообщение
MonsterNya ты ваще не то делаешь я те скажу CheckedTextView это епты готовое решение, делай сам все епты почитай про listview там BaseAdapter

Не по теме:

лишь бы ляпнуть?


MonsterNya, если необходимо обрабатывать отдельные вьюхи в итеме listview, то нужно делать как я писал выше. Только в вашем случаи нужно сделать implements View.OnClickListener и тогда сможете отловить нажатие на любой вьюхе в строке.
Yandex
Объявления
23.04.2014, 16:10     Обработка нажатия CheckBox в ListView
Ответ Создать тему
Опции темы

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