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

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

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

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

22.04.2014, 13:53. Просмотров 3694. Ответов 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
Severomor1
0 / 0 / 0
Регистрация: 09.01.2014
Сообщений: 36
23.04.2014, 10:20  [ТС] #16
Цитата Сообщение от NiRamz Посмотреть сообщение
можете в конструктор класса передавать позицию.
А откуда ее взять? Городить огород с onTouchListener?

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

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

Не по теме:

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


MonsterNya, если необходимо обрабатывать отдельные вьюхи в итеме listview, то нужно делать как я писал выше. Только в вашем случаи нужно сделать implements View.OnClickListener и тогда сможете отловить нажатие на любой вьюхе в строке.
0
kirawa
33 / 33 / 1
Регистрация: 12.11.2013
Сообщений: 336
23.04.2014, 16:52 #21
NiRamz слыш ты внимательно прочитал бы что он вообще сделал

Добавлено через 1 минуту
Цитата Сообщение от MonsterNya Посмотреть сообщение
Создал дополнительный ListView для CheckedTextView, но получил несоответствие высоты строк.
Ты ваще NiRamz погнал на меня, жду извинений
0
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
23.04.2014, 16:59 #22
Прочитай сначала что было описано, далее какие пути решения были предприняты. А потом еще раз на то что я написал.

Не по теме:

и как бы не в подворотне общаемся, можно и более уважительно высказываться

0
MonsterNya
0 / 0 / 0
Регистрация: 04.03.2014
Сообщений: 27
23.04.2014, 18:24 #23
NiRamz, спасибо, а можно подробнее? сейчас у меня так
Java
1
2
3
4
5
6
7
8
ListView lvData;
lvData.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {                
                m_id = id;
                showDialog(IDM_ACTION);
            }
        });
0
kirawa
33 / 33 / 1
Регистрация: 12.11.2013
Сообщений: 336
23.04.2014, 19:53 #24
Цитата Сообщение от kirawa Посмотреть сообщение
Создал дополнительный ListView для CheckedTextView, но получил несоответствие высоты строк.
тоесть он создал два б***ь ListView ёб*****й в рот и получил несоответствие строк я не понимаю
0
MonsterNya
0 / 0 / 0
Регистрация: 04.03.2014
Сообщений: 27
23.04.2014, 21:43 #25
В onCreate сделал
Java
1
2
3
text = (TextView) findViewById(R.id.itemID);
TextView text = new TextView(this);
text.setOnClickListener(new MyClickListener());
А в MainActivity
Java
1
2
3
4
5
6
7
class MyClickListener implements View.OnClickListener {
         @Override
         public void onClick(View v) {
         // TODO Auto-generated method stub
         Log.d("my_tag", "Boom");
         }
         };
Но так не работает, строка всё ещё выделяется целиком. Что делаю не так?
0
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
24.04.2014, 11:10 #26
это все делается в getView в адаптере
0
MonsterNya
0 / 0 / 0
Регистрация: 04.03.2014
Сообщений: 27
24.04.2014, 12:11 #27
Вот только адаптер у меня сейчас
Java
1
scAdapter = new SimpleCursorAdapter(this, R.layout.item, cursor, from, to);
Я так понимаю мне его полностью переделать надо?
0
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
24.04.2014, 12:26 #28
да, унаследуйте свой класс от CursorAdapter
0
MonsterNya
0 / 0 / 0
Регистрация: 04.03.2014
Сообщений: 27
24.04.2014, 13:51 #29
Уфф, что-то вышло, только теперь строки пустые и сначала отрабатывает lvData.setOnItemClickListener и вызывает showDialog(IDM_ACTION), а после выбора действия и возвращения к списку работает Toast кликлик...А если убрать lvData.setOnItemClickListener, то вообще по нажатию на строку списка нчиего не происходит
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
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);     
 
        // открываем подключение к БД
        db = new DB(this);
        db.open();
 
        // получаем курсор
        refreshCursor();
 
        // формируем столбцы сопоставления
        String[] from = new String[] { DB.COLUMN_ID, DB.COLUMN_TITLE,
                DB.COLUMN_TRIGGER };
        int[] to = new int[] { R.id.itemID, R.id.itemTitle, R.id.itemTrigger };
 
        // создааем адаптер и настраиваем список
        scAdapter = new CustomCursorAdapter(this, R.layout.item, cursor, from,
                to);
        lvData = (ListView) findViewById(R.id.lvData);
        
        // устанавливаем режим выбора пунктов списка 
        lvData.setChoiceMode(ListView.CHOICE_MODE_SINGLE);////////////////////////////////
                
        lvData.setAdapter(scAdapter);       
        
        text = (TextView) findViewById(R.id.itemTrigger);       
        
        lvData.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {                
                showDialog(IDM_ACTION);
            }
        });
    }   
     
    public class CustomCursorAdapter extends SimpleCursorAdapter {
 
         public CustomCursorAdapter(Context context, int layout, Cursor cursor,
                String[] from, int[] to) {
            super(context, layout, cursor, from, to);
            // TODO Auto-generated constructor stub
        }
           class ViewHolder {
             TextView b;
         }
        public View getView(final int position, View convertView, ViewGroup parent)
        {
            View view = convertView;
            ViewHolder holder;
            if(view == null) {
                LayoutInflater vi = (LayoutInflater)getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                   view = vi.inflate(R.layout.item, null);
            holder = new ViewHolder();
            holder.b = (TextView) view.findViewById(R.id.itemTrigger);
            view.setTag(holder);
            }
            else
            {
 
                holder = (ViewHolder) view.getTag();
            holder.b.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    Toast.makeText(getApplicationContext(),"ClickClick "+position, Toast.LENGTH_LONG).show();
                }
            });
            }
            return view;
        }}
0
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
24.04.2014, 15:01 #30
Цитата Сообщение от MonsterNya Посмотреть сообщение
lvData.setOnItemClickListener(new AdapterView.OnItemClickListener() {
* * * * * * public void onItemClick(AdapterView<?> parent, View view,
* * * * * * * * * * int position, long id) {* * * * * * * *
* * * * * * * * showDialog(IDM_ACTION);
* * * * * * }
* * * * });
убираем.

Цитата Сообщение от MonsterNya Посмотреть сообщение
holder.b.setOnClickListener(new View.OnClickListener() {
* * * * * * * * public void onClick(View v) {
* * * * * * * * * * // TODO Auto-generated method stub
* * * * * * * * * * Toast.makeText(getApplicationContext(),"ClickClick "+position, Toast.LENGTH_LONG).show();
* * * * * * * * }
* * * * * * });
* * * * * * }
меняем на
Java
1
holder.b.setOnClickListener(new MyListener());
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.04.2014, 15:01
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
30
Yandex
Объявления
24.04.2014, 15:01
Ответ Создать тему
Опции темы

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