向ListView行视图添加复选框会使该行无法点击。

3
我正在尝试创建一个类似于Gmail应用的 ListView,其中每一行都有一个位于左侧的 CheckBox,以方便通过上下文操作栏进行多个选择和操作,同时允许单击每一行转换到另一个活动。在添加 CheckBox 之前,原始行会使用我正在使用的Holo主题的浅蓝色背景颜色指示其选择,并在单击时调用我的 ListFragment 中的 onListItemClick,在长按时调用我的 OnItemLongClickListener 中的 onItemLongClick。当我将 CheckBox 添加到行视图的布局 .xml 文件中时,背景颜色不再改变,也不再接收点击或长按事件。如果我在视图 .xml 的顶部 ViewGroup 中添加 android:longClickable="true",那么我就可以再次获得长按事件。但是 android:clickable="true" 不会给我点击事件。两者都无法恢复蓝色背景选择指示。只有 CheckBox 本身在触摸时提供蓝色背景的视觉触摸指示。我需要做什么才能在视图中包含 CheckBox 的情况下获得正常的视觉选择指示以及 ListView 行的单击事件?以下是我的视图 .xml 的相关部分:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:longClickable="true"
    android:orientation="horizontal" >

    <CheckBox
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center" />

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:orientation="vertical"
        android:paddingBottom="5dp"
        android:paddingRight="12dp"
        android:paddingTop="5dp" >

        ...

    </LinearLayout>
</LinearLayout>
2个回答

11

我之前写过一篇关于这个主题的博客文章,你可能会发现它有用。实际上问题在于,添加可聚焦元素(例如CheckBoxButton)会禁用单击整个列表项的能力,并且它们的可聚焦性必须被禁用。您也不应向主要布局添加任何clickable标志。


谢谢!那是正确的组合。我一直在尝试使用可聚焦和可点击的值,但只有当 focusable="false" 并且没有添加可点击的值时,它才能正常工作。 - Jeff Lockhart
确实....那么如何捕获复选框的事件呢?例如,一旦它被点击,我想获取该行的名称....@Devunwired? - gumuruh

0
在添加复选框到 CAB 时,请将 focusable 属性设置为 "false",这将解决仅调用一次 onItemCheckedStateChanged 的问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接