Android CAB listview state_selected和state_pressed

时间:2014-10-01 12:45:30

标签: android android-listview android-selector android-contextmenu

我遇到了一个问题:我有一个带有MULTI_CHOICE监听器的ListView,可以打开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

所以基本上我得到了这种闪烁的蓝白蓝色。我想要实现的是&#34;删除&#34;白色背景交易。例如,我看到Gmail应用程序完全符合我的要求。

怎么能实现呢?谢谢!!

编辑: 我尝试将所有内容移动到根listSelector。这是选择器:

<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背景??

1 个答案:

答案 0 :(得分:0)

在名为selected_position的适配器中取一个变量,在此变量中指定选定的位置值。

为适配器调用notifydatasetchanged方法

在get view方法中输入条件如

if(selected_position == position) {    改变列表项的底色 } 其他 {     设置默认背景颜色 }

希望这有帮助