我有一个布局有两个片段.左边的片段是一个使用SimpleCursorAdaptor的ListFragment,右边是一个填充了从左边片段列表中选择的项目的细节.我试图找出如何确保ListFragment中选定的项目保持突出显示,直到列表中的另一个项目被选中.
经过一些研究,我得到了尽量使用android:background =“@ drawable / item_selector”,我可以改变不同状态的颜色,但没有一个似乎坚持下去.我以为选择了…只是选择不同的项目,您所选择的项目仍然保持选择,这似乎是合乎逻辑的.
我甚至尝试使用v.setSelected(true);在我的Clickhandler希望它可能保持状态,但这也没有.
有没有我失踪的状态?我浏览了开发文档,没有什么其他的东西似乎恰当…
item_selector.xml
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@color/green" /> <item android:state_selected="true" android:drawable="@color/blue" /> </selector>
解决方法
答案是在进一步研究后的Android文档中(文档的两部分真的).
首先,在触摸模式下,没有选择或聚焦状态.
其次,默认情况下,listviews被设置为none的选择模式(意味着列表中的任何项目都不能有选择的状态).所有我要做的是改变选择模式(它可以是单个或多个,我只需要/想要的单)添加:
getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
然后我在选择器XML中使用了选择状态(转换为激活状态):
<item android:state_activated="true" android:drawable="@color/blue" />
应用在行布局xml文件作为背景:
<TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/text1" android:layout_width="match_parent" android:layout_height="35dp" android:background="@drawable/item_selector" android:gravity="center_vertical"/>
我选择的项目现在显示为蓝色背景,直到选择了不同的项目.
请注意,这个(android:state_activated)需要Android API 11或更高版本.