1

以下问题让我发疯。我使用以下代码定义了一个 xml 片段:

<fragment class="host.helperclass.ServiceListFragment"
        android:id="@+id/titles"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:layout_width="0px"/>

然后我实现ServiceListFragment了扩展类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没有被识别。这可能吗?如果是这样,有什么办法可以选择里面的项目ListView吗?

笔记:

我还尝试使用只有一个项目的选择器:

 <item android:state_focused="true"
        android:drawable="@drawable/green" />

结果我发现,当我按下 ListView 项目时,背景变为绿色,但当我释放它时,绿色背景被删除。当我将手指从物品上移开时,我的物品似乎失去了焦点。

编辑:

我又做了一次尝试。

我在 onListItemClick 方法中添加了这行代码:

getListView().setItemChecked(index, true);

在我的 xml 选择器中,我只放了这个项目:

  <item android:state_checked="true"
        android:drawable="@drawable/green" />

但奇怪的是,这不起作用。

4

3 回答 3

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>
于 2013-10-20T11:30:27.983 回答
0

试试这个。

将此项目添加到选择器

<item android:state_selected="true"
      android:state_pressed="false"
      android:drawable="@drawable/green" />

并删除

<item android:state_selected="true"
      android:drawable="@drawable/green"/>
于 2013-10-20T13:05:48.820 回答
0

我发现了问题。

为自定义适配器中使用的行定义 xml 布局,我需要将此行添加到根元素:

android:background="?android:attr/activatedBackgroundIndicator"

但是,从 API 级别 11 开始就引入了该属性activatedBackgroundIndicator,因此我将以前版本的 xml 放在 layout 文件夹中,并将新版本放在 layout-v11 文件夹中。

在方法内部还需要以下语句onListItemClick

getListView().setItemChecked(position, true);
于 2013-10-20T15:18:24.917 回答