以下问题让我发疯。我使用以下代码定义了一个xml片段:
<fragment class="host.helperclass.ServiceListFragment"
android:id="@+id/titles"
android:layout_height="match_parent"
android:layout_weight="1"
android:layout_width="0px"/>
然后我实现了扩展ServiceListFragment
的{{1}}类。
我已使用以下代码覆盖SherlockListFragment
方法:
onActivityCreated
getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
getListView().setDividerHeight(2);
getListView().setBackgroundColor(Color.parseColor("#EEEEEE"));
getListView().setCacheColorHint(Color.parseColor("#00000000"));
getListView().setSelector(R.drawable.list_selector);
非常简单:
list_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="@drawable/green"/>
<item android:state_focused="true"
android:drawable="@drawable/green"/>
<item android:state_selected="true"
android:drawable="@drawable/green"/>
</selector>
似乎无法识别。
这可能吗?如果有,是否有任何方法可以选择state_selected
内的项目?
注意:
我还尝试使用只有一个项目的selctor:
ListView
结果我获得了,当我按ListView项时,背景变为绿色,但是当我释放它时,绿色背景被删除。当我从物品上拔下手指时,我的物品似乎失去了焦点。
修改
我又做了一次尝试。
我在onListItemClick方法中添加了这行代码:
<item android:state_focused="true"
android:drawable="@drawable/green" />
并且在我的xml选择器中我只放了这个项目:
getListView().setItemChecked(index, true);
但奇怪的是这不起作用。
答案 0 :(得分:1)
我认为单一选择模式的正确状态是android:state_activated
。
我注意到你正在使用列表选择器。
您应该将它用作列表行的背景(您在适配器中使用的那个)。
例如:
<强> row_background.xml 强>
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_activated="true"
android:drawable="@drawable/green"/>
</selector>
<强> row_layout.xml 强>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/row_background">
<!-- your views -->
</LinearLayout>
答案 1 :(得分:0)
试试这个。
将此项添加到选择器
<item android:state_selected="true"
android:state_pressed="false"
android:drawable="@drawable/green" />
并删除
<item android:state_selected="true"
android:drawable="@drawable/green"/>
答案 2 :(得分:0)
我发现了问题。
定义自定义适配器中使用的行的xml布局,我需要将此行添加到根元素:
android:background="?android:attr/activatedBackgroundIndicator"
但是,自API级别11以来已经引入了属性activatedBackgroundIndicator
,因此我将我的xml的先前版本放在布局文件夹中,并将新版本放在layout-v11文件夹中。
在onListItemClick
方法中还需要以下语句:
getListView().setItemChecked(position, true);