ListView中item与其中的组件(按钮)的焦点获取冲突问题

本文探讨了在Android开发中,ListView中的按钮组件无法触发OnItemClickListener和OnItemLongClickListener事件的原因,并提供了两种解决方案:通过设置ListView的descendantFocusability属性或在按钮上设置focusable属性来解决焦点冲突问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    本人初学在学习安卓时,遇到过这么一问题。在一个ListView 中,每一个子Item中存在Button(类似的其他自动获取焦点的组件)时,ListView的OnItemClickListener和OnItemLongClickListener将变得不可用,而Button却可以使用。从网上查了很多,大家都说是焦点问题,应对这种情况一般有两种方法:

      1.设置android:descendantFocusability="blocksDescendants"其中这条有三个属性,对应这一条为阻挡子空间获取焦点,对应另外两条为可自行百度会有很多说法。
本人一开始以为,设置后子空间如button,将不能被点击。后来试了一下,发现当设置后button得点击还是能用的。后来查了以下,说是能click不一定要获取焦点。其次注意在这条属性是在Layout中加这条属性,当加在ListView中是没有效果的,如
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:descendantFocusability="blocksDescendants"
   >

如图 ,item可以被电击, button也可以被点击。
好多人说是在ListView中加的话是没有效果的。
当只在ListView总加时,如
<ListView
    android:id="@+id/listView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:descendantFocusability="blocksDescendants"
/>是无效的。
其次需要注意的是别在Layout中加
android:clickable="true"
加了以后,无论怎么设置都不管用了。
          2.在子控件中加
          android:focusable="false"也可以实现,只需在男些自动获取焦点中的组件加如button,checkbox,edittext等就可以了。设置后也还能Click。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值