2017-04-06 54 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

相关问题