在ListView中启用选择

时间:2013-10-20 11:22:35

标签: android android-layout android-listview actionbarsherlock android-selector

以下问题让我发疯。我使用以下代码定义了一个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);

但奇怪的是这不起作用。

3 个答案:

答案 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);