Изменить цвет фона элемента списка

Интерфейс, диалоги, темы, стили, меню
Ответить
jBee
Сообщения: 41
Зарегистрирован: 03 апр 2013, 16:24

Изменить цвет фона элемента списка

Сообщение jBee » 13 апр 2013, 22:18

Есть список, элементы списка заполняются из базы. Как сделать чтобы при нажатии на элемент он менял свой фоновый цвет? Вроде бы понятно что это надо делать по событию OnItemClickListener но вот что то работает это не так как надо.

Пробовал сделать так:

Код: Выделить всё

ListView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

...
               parent.getChildAt(position).setBackgroundColor(Color.BLUE);
...
 }
но на строке где устанавливается цвет элемента списка происходит исключение.

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Изменить цвет фона элемента списка

Сообщение rezak90 » 13 апр 2013, 22:37

почему бы на элемент не поставить селектор?
R.id.team
Политика на форуме запрещена

jBee
Сообщения: 41
Зарегистрирован: 03 апр 2013, 16:24

Re: Изменить цвет фона элемента списка

Сообщение jBee » 14 апр 2013, 19:01

rezak90,

Что такое селектор и как его поставить на элемент? Или ткните пожалуйста на какой нибудь простой пример как сделать подсветку элемента списка с помощью селектора.

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Изменить цвет фона элемента списка

Сообщение rezak90 » 14 апр 2013, 19:39

selector выглядит так:

Код: Выделить всё

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/button_background" android:state_pressed="true"/>
    <item android:drawable="@color/Button_pressed"/>

</selector>
Помещается в папку drawable
Например его название selector_item, тогда в ячейке лейаута в бэкграунд прописываете

Код: Выделить всё

android:background="@drawable/selector_item"
R.id.team
Политика на форуме запрещена

jBee
Сообщения: 41
Зарегистрирован: 03 апр 2013, 16:24

Re: Изменить цвет фона элемента списка

Сообщение jBee » 14 апр 2013, 21:11

У меня в проекте несколько папок с именами drawable-hdpi, ldpi и т.д. Получается описание селектора надо положить в каждую?

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Изменить цвет фона элемента списка

Сообщение rezak90 » 14 апр 2013, 22:20

jBee писал(а):У меня в проекте несколько папок с именами drawable-hdpi, ldpi и т.д. Получается описание селектора надо положить в каждую?
нет, создать нужно папку в res под названием drawable
R.id.team
Политика на форуме запрещена

vapsel
Сообщения: 16
Зарегистрирован: 23 мар 2014, 00:23

Re: Изменить цвет фона элемента списка

Сообщение vapsel » 10 апр 2014, 18:28

rezak90 писал(а):почему бы на элемент не поставить селектор?

подскажите, а как сделать выделение одного из элементов списка? что б его сразу было видно при открытии активити?

Аватара пользователя
elron
Сообщения: 31
Зарегистрирован: 14 окт 2012, 13:29

Re: Изменить цвет фона элемента списка

Сообщение elron » 11 апр 2014, 14:26

Есть несколько вариантов, один из них это создать boolean[], в onClickListener брать position и по нему переключать (b[position] = !b[position];) и вызывать у адаптера notifyDatasetchanged()(как-то так), а в адаптере при прорисовке делать проверку и переключать цвет.

Аватара пользователя
elron
Сообщения: 31
Зарегистрирован: 14 окт 2012, 13:29

Re: Изменить цвет фона элемента списка

Сообщение elron » 11 апр 2014, 14:54

Другой вариант: хранить ссылки в массиве linearLayout(или другой), а по onClick вызывать этот linearLayout.get(position).setBackgroundColor(Color.GREEN), как то так.. а position можно хранить в теге linearLayout

vapsel
Сообщения: 16
Зарегистрирован: 23 мар 2014, 00:23

Re: Изменить цвет фона элемента списка

Сообщение vapsel » 11 апр 2014, 20:18

elron писал(а):Есть несколько вариантов, один из них это создать boolean[], в onClickListener брать position и по нему переключать (b[position] = !b[position];) и вызывать у адаптера notifyDatasetchanged()(как-то так), а в адаптере при прорисовке делать проверку и переключать цвет.
хоть я не совсем понял, однако стало ясно, что метод onClickListener подразумевает нажатие. мне же нужно что бы элемент выделялся сразу при открытии списка без дополнительных действий пользователя

Ответить