我有 Selector
作为 ListView
的 listSelector
. 而且在ListView中,我已经设置了
android:choiceMode="singleChoice"
android:listSelector="@drawable/list_selector"
android:background="@android:color/transparent"
android:cacheColorHint="@android:color/transparent"
当用户触摸 ListView
的任何项目时,它会采用正确的蓝色,但一旦用户移开手指,它就会变回黑色 . 我希望所选项目保留蓝色,直到并且除非用户触摸任何其他项目 .
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_selected="false"
android:state_pressed="false"
android:drawable="@color/grey" />
<item android:state_pressed="true"
android:drawable="@color/blue" />
<item android:state_selected="true"
android:state_pressed="false"
android:drawable="@color/blue" />
</selector>
我需要做些什么改变?
4 回答
您必须将
ListView
的android:choiceMode
设置为singleChoice
. 此外,您应该将android:listSelector
设置为您已经实现的选择器,并从ListView
的项目中删除该选择器(或任何其他android:background
drawable),以使其背景透明 .除此之外,您应该扩展您的选择器以对
android:state_checked
做出反应并注册OnItemClickListener
,如下所示:用于列表项的顶级视图组件需要实现接口
Checkable
. 有关已经开箱即可检查的类的列表,请参阅http://developer.android.com/reference/android/widget/Checkable.html . 如果您只想显示文本CheckedTextView
应该为您做 . 否则,如果使用自定义视图,则必须自己实现此接口 .在
onListItemClick
中,强制查看状态:在你的代码中尝试这个
它可能会帮助你......
在这种情况下,我认为您需要从
ArrayAdapter
类进行管理 . 在那里你必须记住最后点击的项目视图和位置 .基本思路是
onListItemClick
将点击的位置和项目视图传递给适配器,我们将使用您喜欢的颜色设置背景,并更改最后选择的背景颜色以查看默认颜色 .单击列表项目,您需要将单击的项目和位置传递给适配器 .
如果你想从其他点调用这个集合选择,你可以像这样调用它 .