我有一些非常簡單的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