为什么将按钮添加到 (Android) 列表视图项目会关闭项目本身的点击侦听器事件



我有一些非常简单的xml定义ListView项目。 每个项目包含 2 个文本视图小部件和一个按钮。 我昨天才添加了按钮,突然点击列表视图项本身不再产生 onItemClick(( 事件。

我已经仔细地重现了这一点,只需删除 XML 中 ListItem 的按钮条目即可触发 onItemClick(( 事件。 对其他 SO 问题的回答表明,放置在 ListView 项上的控件可以捕获或以其他方式阻止点击事件触发侦听器(例如,请参阅此处(。 因此,为了找到解决方法,我在 TextView 控件中添加了以下 3 行,但没有任何效果:

    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,听众就会突然再次开始触发。

添加这个:

android:descendantFocusability="blocksDescendants"

listview的根布局中,单击"侦听器"以工作。 blocksDescendants意味着ViewGroup将阻止其后代接收焦点。

    <?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:descendantFocusability="blocksDescendants"
    android:id="@+id/linLyt"
    >

在代码中:

yourListview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
   public void onItemClick(AdapterView<?> list, View v, int pos, long id) {
      // Your code for item click
   }
});

现在,对于列表视图行中的按钮单击侦听器:您可以在自定义适配器的getView()方法中设置 onClick() 事件。

相关内容

  • 没有找到相关文章

最新更新