Вопрос

У меня есть ListView, поддерживаемый настраиваемым ArrayAdapter, где каждый элемент имеет 2 линейных описания - одно я называю head, а другое - body.Тело скрыто (пропало) до тех пор, пока пользователь не нажмет на строку, после чего оно выскользнет.Второй щелчок (по голове) скроет тело.Однако, если пользователь нажимает на тело, это приводит к другому действию.Все это работает просто отлично, и вот тут возникает проблема:

Когда пользователь нажимает на body, я хочу визуальную индикацию действия точно так же, как обычный элемент списка будет мигать оранжевым фоном при нажатии.Я не получаю это по умолчанию, поскольку (моя теория) событие onPress перехватывается представлением body и не обрабатывается элементом списка.

Первое, что я попробовал, это выполнить body.setBackground('#ff00ff') (не обращайте внимания на цвет) в событии onPress.Это не сработало, так как (я подозреваю) после вызова перерисовка не производится.Затем я покопался еще немного и решил использовать <selector/>-на основе предыстории.Я определил body_background.xml в drawable папку и присвоил ее свойству background тела.

Там я заметил, что фон изменится только в том случае, если четность обрабатывается списком.Например, если я установлю <item android:state_selected="true" android:drawable="@drawable/selected"/> затем, когда я нажимаю на голову - фон обоих элементов (головы и тела) изменится, однако, когда я нажимаю на тело - ничего.

Итак, чтобы подвести итог моему вопросу - как мне изменить фон дочернего элемента в элементе списка, если я назначу ему пользовательский обработчик onClick?Любые подсказки будут с благодарностью приняты

Это было полезно?

Решение

ОК.Вот еще кое-какая информация, которую я раскопаю по пути.

  1. В настоящее время я пытаюсь переключить реализацию на ExpandableListView, который предоставляет функциональность, которую я должен был закодировать (скользящее тело).Проблема, с которой я могу столкнуться здесь, заключается в том, что у меня есть необычная реализация "бесконечного" списка, и я использую метод ArrayAdapter #add для динамического добавления элементов в список во время прокрутки (см. Мой учебное пособие по androidguys.com) Ну, в add метод отсутствует в BaseExpandableListAdapter итак, мне нужно посмотреть, будет ли работать добавление элементов во внутренний массив (это не сработало для ArrayAdapter), возможно, выполнение ExpandableListView#notifyChanged() позаботится об этом
  2. Тот факт, что я ничего не вижу, когда я непосредственно использую setBackgroundColor метод, вероятно, связан с последующим вызовом startActivity вызов, который останавливает все рисование до тех пор, пока не будет отображено новое действие

P.S.эта проблема была устранена путем переключения на ExpandableListView.И позвольте мне добавить - это прекрасно!Не нужно ничего выдумывать

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top