在项目中,item中有3个控件,其中有2个控件是可以正常获取到焦点,但是第三个点击的时候,却出发了Item的点击事件。
?
android:descendantFocusability ? // 放在listview中的item的顶级布局上。
?
Constant ? ? ? ? ? ?Value ? ? ? ?Description
beforeDescendants
0 ? ?The ViewGroup will get focus before any of its descendants. //Item先获取到焦点
afterDescendants
1 ? ? ?The ViewGroup will get focus only if none of its descendants want it. //子控件获取到焦点--- 也就是item无法获取到焦点
blocksDescendants
2 ?The ViewGroup will block its descendants from receiving focus. //让子控件无法获取焦点 --事实证明子控件是可以获取到焦点的。
ListView默认情况
?
当item有焦点时,item上的button等子控件获取不到焦点;
当子控件有焦点时,item无焦点无法响应onItemClick事件
?
ViewGroup.FOCUS_AFTER_DESCENDANTS:表示item的子控件优先于item获得焦点;
ViewGroup.FOCUS_BEFORE_DESCENDANTS:表示item优先于其子控件获得焦点。
解决办法:
?
- listView.setOnItemSelectedListener(onItemSelectedListener);??
- private?AdapterView.OnItemSelectedListener??onItemSelectedListener?=???
- ????new?AdapterView.OnItemSelectedListener(){??
- ????@Override??
- ????public?void?onItemSelected(AdapterView<?>?parent,?View?view,??
- ????????????int?position,?long?id)?{??
- ????????//当此选中的item的子控件需要获得焦点时??
- ????????parent.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);??
- ????????//else?parent.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);??
- ????}??
- ??????
- ????@Override??
- ????public?void?onNothingSelected(AdapterView<?>?parent)?{??
- ????????parent.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);??
- ????}??
- } ?