2017-04-06 83 views
0

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

回答

1

添加此。 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()事件。

+0

果然,修復它。但爲什麼?爲什麼添加按鈕突然需要設置descendantFocusability屬性?在添加Button之前並不需要它。 – Alyoshak

+0

'Button'是一個可聚焦的元素...所以它會自動獲取焦點,導致列表項不會工作。您可以在按鈕xml中添加'android:focusable =「false」'。它應該仍然是可點擊的,但不會得到關注 – rafsanahmad007

相關問題