Android - необычная фоновая проблема ListView
-
05-07-2019 - |
Вопрос
У меня есть 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?Любые подсказки будут с благодарностью приняты
Решение
ОК.Вот еще кое-какая информация, которую я раскопаю по пути.
- В настоящее время я пытаюсь переключить реализацию на ExpandableListView, который предоставляет функциональность, которую я должен был закодировать (скользящее тело).Проблема, с которой я могу столкнуться здесь, заключается в том, что у меня есть необычная реализация "бесконечного" списка, и я использую метод ArrayAdapter #add для динамического добавления элементов в список во время прокрутки (см. Мой учебное пособие по androidguys.com) Ну, в
add
метод отсутствует вBaseExpandableListAdapter
итак, мне нужно посмотреть, будет ли работать добавление элементов во внутренний массив (это не сработало для ArrayAdapter), возможно, выполнение ExpandableListView#notifyChanged() позаботится об этом - Тот факт, что я ничего не вижу, когда я непосредственно использую
setBackgroundColor
метод, вероятно, связан с последующим вызовомstartActivity
вызов, который останавливает все рисование до тех пор, пока не будет отображено новое действие
P.S.эта проблема была устранена путем переключения на ExpandableListView.И позвольте мне добавить - это прекрасно!Не нужно ничего выдумывать