Сделать элемент ListView светящимся из кода - PullRequest
3 голосов
/ 30 марта 2011

Вот моя проблема: у меня есть Activity, который включает ListView с указанием различных местоположений и MapView с маркерами для этих местоположений.

То, что я хочу сейчас, - это когда одиниз маркеров MapView щелкают, чтобы выбрать соответствующий элемент ListView и светиться (как если бы он был нажат).

Я нашел методы ListView.setSelection(int) и ListView.requestChildFocus(View, View).Первый делает почти то, что я хочу (если у меня длинный список, он проходит через него, пока элемент не виден), но в нем отсутствует эффект свечения, чтобы явно показать элемент.Что касается второго, я не уверен, для чего предназначен второй параметр (это ранее сфокусированное представление в упражнении?).

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

Спасибо.

РЕДАКТИРОВАТЬ: вспомогательный вопрос, возможно ли получить стандартное рисование, используемое в качестве фона при щелчке элемента ListView?Может ли он быть найден в R.attr как listPreferredItemHeight или как?

1 Ответ

5 голосов
/ 30 марта 2011

Вместо того, чтобы делать выбранные элементы, вы хотите, чтобы они проверялись. Это позволяет использовать StateListDrawable для изменения внешнего вида элемента, поскольку элементы не остаются выделенными, когда они находятся в сенсорном режиме. Вы должны перевести ваш ListView в режим единого выбора, включить проверку списка элементов и использовать StateListDrawable, чтобы изменить внешний вид отмеченных элементов.

Чтобы перевести ListView в режим единого выбора:

getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);

Затем, когда вы хотите выделить элемент в вашем ListView, вы делаете это:

getListView().setItemChecked(index, true);

Я считаю, что корневой элемент макета вашей строки должен реализовывать Checkable, вы сможете найти пример CheckableRelativeLayout или CheckableLinearLayout онлайн.

Это делает ваш элемент «проверенным», но вам все равно нужно, чтобы он светился, поэтому в макете строки вы должны использовать StateListDrawable, чтобы изменить его внешний вид при проверке, добавив его в макет:

android:background="@color/list_view_item_selector"

и создание файла color\list_view_item_selector.xml следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true" android:drawable="@color/selected_item" />
    <item android:drawable="@android:color/transparent" />
</selector>
...