本人初学在学习安卓时,遇到过这么一问题。在一个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。