我有一些非常简单的xml定义ListView项目。每个项目包含2个TextView小部件和一个按钮。我只在昨天添加了Button,并且突然点击ListView项目本身不再产生onItemClick()事件。为什么添加按钮到(Android)ListView项目关闭点击该项目本身的监听器事件?
我已经仔细地转载了此内容,只是删除了XML中的Button条目,ListItem允许触发onItemClick()事件。对其他SO问题的回答显示,放置在ListView项目上的控件可以捕获或以其他方式防止轻敲事件触发侦听器(例如,参见here)。因此,希望能找到一个解决方法,我添加以下3行到我的TextView控件没有影响:
android:focusable="false"
android:textIsSelectable="false"
android:clickable="false"
我的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:orientation="horizontal"
android:id="@+id/linLyt"
>
<TextView
android:id="@+id/tvVal1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="left"
android:layout_gravity="left|center_vertical"
android:text="0."
android:textSize="16sp"
android:maxLines="1"
android:layout_weight=".15"
/>
<TextView
android:id="@+id/tvVal2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:paddingLeft="5dp"
android:gravity="left"
android:layout_gravity="center_vertical"
android:text=""
android:textSize="16sp"
android:maxLines="1"
android:layout_weight=".55"
android:focusable="false"
android:textIsSelectable="false"
android:clickable="false"
/>
<Button
android:id="@+id/btnClickMe"
android:layout_width="0dp"
android:layout_height="40dp"
android:gravity="right|center_vertical"
android:layout_gravity="right"
android:textColor="@color/CornflowerBlue"
android:text="Click"
android:minHeight="0dp"
android:minWidth="0dp"
android:textSize="16dp"
android:maxLines="1"
android:layout_weight=".3"
android:background="?android:attr/selectableItemBackground"
/>
</LinearLayout>
再次,只是简单地删除或注释在Button xml中,突然听者再次开始发射。在你的根布局listview
使ListView项点击监听工作
android:descendantFocusability="blocksDescendants"
:
果然,修复它。但为什么?为什么添加按钮突然需要设置descendantFocusability属性?在添加Button之前并不需要它。 – Alyoshak
'Button'是一个可聚焦的元素...所以它会自动获取焦点,导致列表项不会工作。您可以在按钮xml中添加'android:focusable =“false”'。它应该仍然是可点击的,但不会得到关注 – rafsanahmad007