Представление списка Android CAB state_selected и state_pressed

У меня проблема: у меня есть ListView с прослушивателем MULTI_CHOICE, который открывает ContextualActionBar. Для каждого элемента в этом списке я установил фон в корневом макете. Это XML:

<item android:drawable="@color/light_blue_alpha"
      android:state_activated="true"/>

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

<item android:drawable="@drawable/card_background"/>

В этом случае фоном по умолчанию является макет карты (в основном белый). Когда элемент нажат, фон становится светло-голубым. При активации (через выбор CAB) фон становится светло-голубым с альфа-каналом 0,5.

Вот что происходит: запускаю CAB. Если я выберу новый элемент во время CAB, этот элемент изменит свой фон на light_blue (при нажатии). Когда я отпускаю палец, он меняется на фон по умолчанию card_background. Через несколько миллисекунд он активируется, а затем меняется на light_blue_alpha.

Так что в основном я получаю мерцание сине-бело-голубого. Чего я хочу добиться, так это «удалить» транзакцию белого фона. Например, я вижу, что приложение Gmail делает именно то, что я хочу.

Как этого добиться? Спасибо!!

РЕДАКТИРОВАТЬ: я попытался переместить все в корневой списокSelector. Это селектор:

<item android:state_pressed="true"  android:drawable="@color/light_blue"/>
<item android:state_activated="true"  android:drawable="@color/light_blue_alpha"/>
<item android:drawable="@android:color/transparent"/>

Я также установил для drawOnTop значение true, и нажатый фон применяется правильно. Но state_activated — нет! Когда я запускаю CAB, элемент возвращается к своему фону по умолчанию. Почему не принимает фон state_activated??


person edoardotognoni    schedule 01.10.2014    source источник
comment
Можешь прикрепить what is happening и what you want to acheive :)   -  person Maveňツ    schedule 01.10.2014
comment
Вот так. Но я вполне могу это сделать. Проблема в том, что когда я отпускаю палец на элементе, элемент возвращается к своему фону по умолчанию и через несколько миллисекунд активируется, поэтому он переходит на активированный фон. Я хочу отключить или скрыть эффект отпускания пальца. Я хочу, чтобы элемент переходил с нажатого фона на активированный фон НЕПОСРЕДСТВЕННО   -  person edoardotognoni    schedule 01.10.2014


Ответы (1)


возьмите одну переменную в адаптере с именем selected_position, назначьте значение выбранной позиции в этой переменной.

вызвать метод notifydatasetchanged для адаптера

в методе просмотра поставьте условие, например

if(selected_position == position) { изменить фоновый цвет элемента списка } else { установить цвет фона по умолчанию }

Надеюсь это поможет

person Komal Sorathiya    schedule 01.10.2014
comment
ммх .. Мне действительно нужно приложить руки к коду Java? Если я не найду никакого решения, я пойду с этим - person edoardotognoni; 01.10.2014