Если onListItemClick не работает в ListView…

Делал тут ListView в котором элементы списка — сложная композиция, состоящая из кучи TextView, ToggleButton, Button и т.п. вот такого вида (типа шедулер):

lvsshot

Сделал layout для элемента списка, написал собственный адаптер, настроил… Вдруг, когда, наконец, все начало отображаться как нужно, выяснилась одна неприятная особенность — список перестал реагировать на нажатие на элементе, т.е. событие onListItemClick просто не срабатывало и при тыканье пальцем элемент списка даже не выделялся. Пришлось искать…

Вот никто же нигде не пишет о такой особенности! Я уже молчу про творение Голощапова, жаль, у меня печки нет, а то пригодилось бы, ибо толку от него — «минус null».

Итак, полез в инет, как всегда. Оказалось вот что: элементы в layout элемента списка перехватывают фокус, тем самым лишая фокуса сам ListView. И для того, чтобы все заработало как надо, нужно к каждому элементу layout элемента добавить в его XML-описании следующие строки:

android:focusableInTouchMode="false"
android:clickable="false"
android:focusable="false"

Я добавил эти строки ко всем TextView, ToggleButton и просто Button, но к LinearLayout и прочим layout-ам добавлять не стал. И, о чудо! — все заработало…
Причем, ToggleButton и просто Button остались кликабельны, т.е. отрабатывали нажатие как положено.
Надеюсь, кому-нить поможет!

2 комментария

  1. Дмитрий:

    Спасибо, статья очень полезная. На кучах русских форумах об этом пишут. И не только новички… На стэковерфлоу есть похожая, но конечно на английском)
    Было бы круто, если бы ты выложил пример адаптера с OnClickListener-ами для кнопок. Это в getView делается ведь да???

  2. Dima:

    Достаточно задать android:focusable=»false», ито только кликабельным элементам, например, Button

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *