1

我正在尝试在应用程序的导航抽屉中使用 ListView。我想让人们在这个 ListView 中选择多个项目(对应于我的应用程序中的一些标签),并向用户显示选择了哪些项目。

我在 Android >=4.0 上使用以下可绘制对象,它被设置为列表视图中每个项目的背景。

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_activated="true" android:drawable="@drawable/list_pressed_holo_light" />
    <item android:drawable="@color/transparent" />
</selector>

它适用于该版本。但在 Android 2.3(模拟器)上,一旦选择它就不会显示任何反馈。

我还尝试了其他在我的模拟器上效果不佳的选择器可绘制对象,例如

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/solid_white" android:state_activated="false"/>
    <item android:drawable="@drawable/solid_white" android:state_activated="false" android:state_pressed="false"/>
    <item android:drawable="@drawable/listitem_pressed" android:state_pressed="true"/>
    <item android:drawable="@drawable/listitem_focused" android:state_activated="true"/>
</selector>

请注意,在我的 Java 代码中,我使用以下行来设置用户单击时选择的项目:

this.mDrawerList.setSelection(position);
4

2 回答 2

2

因此,多亏了对 Jonathan 发布的教程的评论,我设法找到了解决方法。

由于 state_activated 仅在 Android API 级别 11 上添加,旧设备无法使用它。但是,他们可以使用 state_checked,所以您只需要添加一个layout-v11包含最新布局TextViewlayout文件夹(对我来说是是一个CheckedTextView)。

然后,您list.onItemClickListener现在可以检查 API lvl, if(Build.VERSION.SDK_INT <= Build.VERSION_CODES.HONEYCOMB)然后只需检查 CheckedTextViewviewClicked.setChecked(!viewClicked.isChecked());

于 2013-08-03T23:43:47.263 回答
1

因此,您的问题似乎是直到 API 级别 11(即 Android 3.0)才引入 state_activated 参数。幸运的是,你有希望;看看这个教程,看看它是否能完成工作。

于 2013-08-03T21:53:23.090 回答