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

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

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

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

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

Привет,
Есть ListView на основе BaseAdapter. Каждый элемент содержит TextView и несколько чекбоксов. Как обработать нажатие на конкретный CheckBox? onListItemClick при нажатие на чекбокс не вызывается.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.04.2014, 13:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Обработка нажатия CheckBox в ListView (Программирование Android):

CheckBox обработка события нажатия - Программирование Android
Проблема в следующем. Есть своего рода каталог картинок возле которой стоит checkbox. Человек нажимает на него, в базу записывается номер...

Данные из SQlite в ListView, обработка события ListView - Программирование Android
Ребят, есть БД, ListView. Надо при нажатии на строчку ListView вытащить данные int из БД. mList.setOnItemClickListener(new...

Создание ListView с CheckBox из БД - Программирование Android
Привет, приложение создает БД с полями id, String и Int _id Name Check 1 Москва 1 2 Казань 0 3 Ростов 0 4 Минск 1 5 Дели 1

Обработчик нажатия на ListView - Программирование Android
Добрый день, перерыл много сайтов, но ответ все же не нашел. Проблема в следующем. У меня имеется обычный ListView и стандартный...

ListView не реагирует на нажатия - Программирование Android
Кинул на активность элемент ListView, присвоил ей кастомный адаптер и слой для элементов. В лист элементы добавляются, отображаются...

Сохранение состояния Checkbox в Listview - Программирование Android
Возникла проблема с сохранением состояния checkbox'ов в Listview. Listview состоит из текста, напротив которого стоит чекбокс. Требуется...

31
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
22.04.2014, 14:53 #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());
1
Severomor1
0 / 0 / 0
Регистрация: 09.01.2014
Сообщений: 36
22.04.2014, 15:47  [ТС] #3
NiRamz, спасибо, работает!
Еще вопрос: это же получается, что на каждый CheckBox на экране будет создан new MyListener? Не многовато будет?
0
646kapeh064
59 / 58 / 15
Регистрация: 09.12.2013
Сообщений: 208
22.04.2014, 16:10 #4
Severomor1, можешь создать один и привязать ко всем)
Java
1
2
3
4
5
6
MyListener listener = new MyListener();
// а тут привязываешь
.setOn...(listener);
.setOn...(listener);
.setOn...(listener);
.setOn...(listener);
0
Severomor1
0 / 0 / 0
Регистрация: 09.01.2014
Сообщений: 36
22.04.2014, 16:15  [ТС] #5
646kapeh064, я так и думал, но как тогда в listener определить позицию элемента ListView, в которой был нажат чекбокс?
0
646kapeh064
59 / 58 / 15
Регистрация: 09.12.2013
Сообщений: 208
22.04.2014, 16:20 #6
Severomor1, а ты как определял до этого?
0
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
22.04.2014, 16:24 #7
Цитата Сообщение от 646kapeh064 Посмотреть сообщение
можешь создать один и привязать ко всем)
не получится
Цитата Сообщение от Severomor1 Посмотреть сообщение
Еще вопрос: это же получается, что на каждый CheckBox на экране будет создан new MyListener? Не многовато будет?
не будет, вьюхи которые за пределами экрана убираются в кеш, далее при появлении на экране мы переопределяем листенера, а старый убьется сборщиком.
0
646kapeh064
59 / 58 / 15
Регистрация: 09.12.2013
Сообщений: 208
22.04.2014, 16:28 #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 ...
            }
        }
    }
ты предусмотрел такой вариант идентификации объекта
0
Severomor1
0 / 0 / 0
Регистрация: 09.01.2014
Сообщений: 36
22.04.2014, 16:31  [ТС] #9
Цитата Сообщение от 646kapeh064 Посмотреть сообщение
Severomor1, а ты как определял до этого?
Ах да, из getView же можно взять.
0
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
22.04.2014, 16:32 #10
уверены?
будет 10 элементов в списке, в каждом из них будет вьюха с идентификатором text, как вы определите на какую именно было нажато?
Да, можно по другому, но этот более правильный.
0
646kapeh064
59 / 58 / 15
Регистрация: 09.12.2013
Сообщений: 208
22.04.2014, 16:36 #11
Цитата Сообщение от NiRamz Посмотреть сообщение
в каждом из них будет вьюха с идентификатором text, как вы определите на какую именно было нажато?
Действительно... архитектура в андроиде странная. Забыл про это.

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

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

Кнопка в listView и обработчик нажатия - Программирование Android
Здравствуйте.Помогите пожалуста. Есть список ListView обрабатываю нажатие элемента из списка вот этим кодом mList = (ListView)...

Перестали происходить нажатия на ListView - Программирование Android
Кто не спит, помогите как можно скорее. Есть ListView. вроде ничего не трогал, но перестало происходить нажатие на элемент. <ListView ...

Обработка checkbox'ов - Программирование Android
Здравствуйте, каким образом можно обработать не сразу же все чекбоксы а постепенно: допустим выбрано 3 чекбокса, и вначале 1 потом 2...

Обработка нажатия по координатам - Программирование Android
Есть ImageView (.png). Нужно обработать нажатия через OnTouchListener в 3-х местах этого png файла. Область каждого нажатия - круг...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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